在我看来,object
和Record<any, any>
这两种类型都包含相同的有效对象集,这是typeof x === "object
的任何内容。这两者之间有什么区别吗?
发布于 2018-09-10 01:04:45
object
type旨在抽象出对象的所有键,而Record
则专门定义类型的键。这意味着在尝试访问对象属性时,存在差异。
TypeScript将允许访问类型为Record<any, any>
的对象的任何属性,即使特定的键未知,因为第一个泛型参数是any
。
let a: Record<any, any>;
a.foo; // works
但是,在类型为object
的对象上,键不会被假定为any
。与Record<any, ...>
一样,TypeScript不知道哪些密钥实际存在,但它不允许访问任何密钥:
let b: object;
a.foo; // error: Property "foo" does not exist on type "object"
在TypeScript playground中尝试一下。
https://stackoverflow.com/questions/52245366
复制相似问题