为什么Typescript类型检查器对这个未指定的类型感到不满?

时间:2017-06-09 14:32:28

标签: typescript compiler-errors visual-studio-code

我有一个反应组件,其道具

  • 需要序列化/存储,
  • 包含一项功能

我的存储实用程序不喜欢存储功能,我不需要存储的功能。所以我写了一个函数,它返回一个没有函数组件的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

enter image description here

为什么TS对此处的第一个错误(警告)不满意?我怎么能重构以保持编译器满意并满足生成这个动态对象的需要?

1 个答案:

答案 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];