在 Typescript 中,类型"对象"和"记录<任何,任何>"之间有区别吗?



在我看来,这两种类型objectRecord<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 操场上尝试一下。

相关内容

最新更新