在我看来,这两种类型object
和Record<any, any>
都包含同一组有效对象,这是typeof x === "object
的任何对象。两者之间有什么区别吗?
object
类型旨在抽象出对象的任何键,而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"
在 TypeScript 操场上尝试一下。