我有一个反应组件,其道具
我的存储实用程序不喜欢存储功能,我不需要存储的功能。所以我写了一个函数,它返回一个没有函数组件的props对象的副本:
/**
* Removes functions from the components props, so that the props can be pouched
*/
strippedProps(): Object {
let strippedProps: Object = {};
Object.keys(this.props).forEach((key) => {
let prop: any = this.props[key];
if (typeof (prop) != 'function') {
strippedProps[key] = prop;
}
})
return strippedProps;
}
TS愤怒地强调,我很困惑,因为prop
这里已经特别声明为any
。
为什么TS对此处的第一个错误(警告)不满意?我怎么能重构以保持编译器满意并满足生成这个动态对象的需要?
答案 0 :(得分:1)
this.props
'类型缺少索引签名。
<强> Indexable Types 强>
与我们如何使用接口来描述函数类型类似,我们也可以描述我们可以“索引到”的类型,如[10]或ageMap [“daniel”]。可索引类型具有索引签名,该签名描述了我们可以用来索引对象的类型,以及索引时相应的返回类型。我们来举个例子:
要修复它,你需要告诉Typescript this.props
'对象类型有字符串作为键:
interface QuestionViewProps {
... your definition,
[key: string]: myType,
}
第二个选项是通过 "suppressImplicitAnyIndexErrors": true禁止警告。
第三个选项是转换为,不再是类型安全的:
let prop: any = (<any>this.props)[key];