打字稿为“对象”分配特定类型而不是“任何”
Posted
技术标签:
【中文标题】打字稿为“对象”分配特定类型而不是“任何”【英文标题】:Typescript assign 'Object' a specific type instead of 'any' 【发布时间】:2021-03-17 21:02:15 【问题描述】:由于 --strict_checks 和 typescript eslint 检查,我正在尝试修复我的代码中的一些新错误。下面的代码示例用于我解释的所有内容。假设我有一个对象 a,我想直接将其指定为地图以解决一些错误。我不能使用关键字“任何”。这就是我想要做的:
isEquivalent(a: Object, b: Object): boolean
const aObject: [index: string]: Object = a;
const bObject: [index: string]: Object = b;
使用实际代码 sn-p 链接到 typescript playground:here 但这会引发错误:
错误 TS2322:类型 'Object' 不可分配给类型 ' [index: string]: Object; '。 “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗? “对象”类型中缺少索引签名。
谁能指出我指定对象的类型的解决方案,而不使用“任何”?或者如果这不可能,请告诉我。
【问题讨论】:
进行了您要求的更改。 【参考方案1】: const aObject: [index: string]: Object = a;
将a
(Object
类型)分配给aObject
([index: string]: Object
类型,一个具有字符串属性名称和Object
属性值的对象)。但是 Object
与 [index: string]: Object
的赋值不兼容,所以 TypeScript 会给你这个错误。
如果你想强制它,你可以做一个type assertion:
const aObj = a as [index: string]: Object;
Updated playground link
但请注意,类型断言大多会禁用 TypeScript 的类型检查。调用者可以传入a: 42
,它不是[index: string]: Object
,TypeScript 会允许它,因为你说参数只是Object
,但是你把它当作@ 987654335@.
有时这是合适的,但您可以考虑为参数指定类型[index: string]: Object
,而不是在函数中使用类型断言。这样,TypeScript 可以确保只传入正确类型的对象。
【讨论】:
以上是关于打字稿为“对象”分配特定类型而不是“任何”的主要内容,如果未能解决你的问题,请参考以下文章