在Typescript中,类型`object`和`Record <any,any =“”>`之间有区别吗?

时间:2018-09-09 14:13:51

标签: typescript

在我看来,objectRecord<any, any>这两种类型都包含相同的有效对象集,这是typeof x === "object所适用的任何对象。两者之间有什么区别吗?

1 个答案:

答案 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"

TypeScript playground中尝试。