在我看来,object
和Record<any, any>
这两种类型都包含相同的有效对象集,这是typeof x === "object
所适用的任何对象。两者之间有什么区别吗?
答案 0 :(得分:4)
object
type旨在抽象出对象的任何键,而Record<K, T>
的存在是专门定义类型的键。这意味着尝试访问对象属性时存在差异。
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"