我厌倦了为泛型对象编写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
才有效,但从这个问题来看,似乎不需要。