Typescript 类型脚本分配';对象';特定类型,而不是';任何';
由于--strict_检查和typescript eslint检查,我试图修复代码中的一些新错误。下面是我解释的所有代码示例。假设我有一个对象a,我想直接将它指定为一个映射来避免一些错误。我不能用“任何”这个关键词。这就是我想做的:Typescript 类型脚本分配';对象';特定类型,而不是';任何';,typescript,eslint,Typescript,Eslint,由于--strict_检查和typescript eslint检查,我试图修复代码中的一些新错误。下面是我解释的所有代码示例。假设我有一个对象a,我想直接将它指定为一个映射来避免一些错误。我不能用“任何”这个关键词。这就是我想做的: isEquivalent(a: Object, b: Object): boolean { const aObject: {[index: string]: Object} = a; const bObject: {[index: string]: Ob
isEquivalent(a: Object, b: Object): boolean {
const aObject: {[index: string]: Object} = a;
const bObject: {[index: string]: Object} = b;
}
链接到带有实际代码段的typescript:
但这带来了一个错误:
错误TS2322:类型“Object”不能分配给类型“{[index:string]:Object;}”。
“对象”类型可分配给很少的其他类型。你的意思是用“any”类型吗?
类型“Object”中缺少索引签名
有人能给我指出类型的解决方案,将对象指定为,而不使用“any”吗?或者如果这是不可能的,请告诉我。
const aObject:{[index:string]:Object}=a代码>将a
(类型为Object
)分配给aoobject
(类型为{[index:string]:Object}
,一个具有字符串属性名称和对象
属性值的对象)。但是Object
的赋值与{[index:string]:Object}
不兼容,因此TypeScript会给出该错误
如果要强制执行,可以执行以下操作:
const aObj=a作为{[index:string]:Object};
但是请注意,类型断言大多会禁用TypeScript的类型检查。调用者可以传入{a:42}
,这是而不是a{[index:string]:Object}
,TypeScript会允许它,因为您已经说过参数只是Object
,但随后您将其视为{[index:string]:Object}
有时这是适当的,但是您可以考虑给参数类型<代码> {[index:string ]:对象}< /Cord>,而不是在函数中使用类型断言。这样,TypeScript可以确保只传入正确键入的对象。
进行了您要求的更改。