AutoComplete组件属性检查问题
来源:9-4 新的挑战 - AutoComplete组件分析

qq_慕仙7238509
2020-04-21
interface SelectData {
value: string;
}
type SelectDataType<T = {}> = T & SelectData;
data: () => SelectDataType[] | Promise<SelectDataType[]>;
上面代码为AutoComplete组件里面对属性data的定义
<AutoComplete
data={()=>[
{ label: "a", value: "a" },
{ label: "b", value: "b" },
{ label: "c", value: "c" },
]}
renderOption={(item) => {
return item + " hahah";
}}
/>
为什么当我把data去掉函数直接写成数组 AutoComplete组件里面data填数组label属性会检测出错?(不能将类型“{ label: string; value: string; }”分配给类型“SelectData”。对象文字可以只指定已知属性,并且“label”不在类型“SelectData”中)
难道是写成函数形式会让ts规避一些检查吗?
data: SelectDataType[] | Promise<SelectDataType[]>;
写回答
2回答
-
同学你好 你的这个问题可以简化成我写的这个问题
因为对这个类型兼容性的检查方式跟 interface 一样的,只要在字段上满足类型的要求就好了,多出来内容没关系,有一些特殊的场景下,多出来内容会报错,场景文档在这里 https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks
在这种情况下,ts 认为大概率是我们犯错了,这个 object 是在那里现成声明的,只能给那个地方用,声明额外字段是不合理的
112020-04-24 -
张轩
2020-04-22
同学 请提供一下你出错的代码吧 我在本地没有复现这个问题 谢谢
012020-04-22
相似问题