对象文字的TS接口



我厌倦了为泛型对象编写Record<string, any>接口。因此,我在SO上得到了以下解决方案,用于定义具有动态键的对象的接口,比如这个

interface object {
[key: string]: any;
}

然而,当我使用它时,我会面临这样的错误:

第2行:类型"object"上不存在属性"error"。

1| (data: object) => {
2|  if(data.errors) { 
3|    console.error(data);
4|  }
5| }

请帮忙。

TypeScript已经有一个object类型,因此不能使用object作为类型的名称。(你的interface申报应该会像我在这里一样出现错误。(

只需使用不同的名称:

interface BasicObject {
[key: string]: any;
}
const fn = (data: BasicObject) => {
if (data.errors) { 
console.error(data);
}
};

游乐场链接

(如果您喜欢,也可以将类型定义为type BasicObject = Record<string, any>;。(

替代解决方案:使用:any,而不是创建一个与any完全相同的接口。

我知道建议使用显式类型并避免使用any。但是,既然您想要相同的功能,那么您也可以使用广为人知的关键字,而不是为此创建自己的界面。

显然,只有在接口上不需要其他命名和类型化属性的情况下,使用any才有效,但从这个问题来看,似乎不需要。

最新更新