在 TypeScript 中从对象的值创建类型

在 TypeScript 中根据对象的值创建类型

Create a Type from an object’s Values in TypeScript

从对象的值创建类型:

  1. 声明对象时使用 const 断言。
  2. 用于keyof typeof获取表示对象键的类型。
  3. 在特定键处索引对象的类型以获取其值的类型。
索引.ts
const employee = { id: 1, name: 'James Doe', salary: 100, } as const; // 👈️ use const assertion // 👇️ type Keys = "id" | "name" | "salary" type Keys = keyof typeof employee; // 👇️ type Values = 1 | "James Doe" | 100 type Values = typeof employee[Keys];

as const语法称为
const 断言我们用它来声明一个不可变对象。

我们必须这样做,因为它可以帮助我们缩小对象值的类型。

索引.ts
// 👇️ const employee: { // readonly id: 1; // readonly name: "James Doe"; // readonly salary: 100; // } const employee = { id: 1, name: 'James Doe', salary: 100, } as const; // 👈️ use const assertion

上面示例中对象的值类型为1,James Doe
100,这正是我们需要获得表示对象值的类型的类型。

TypeScript 能够如此具体,因为它知道属性是并且值永远不会改变。 readonly

如果我们不使用 const 断言,我们将获得更多对象值的通用类型。

索引.ts
// 👇️ const employee: { // id: number; // name: string; // salary: number; // } const employee = { id: 1, name: 'James Doe', salary: 100, };

上面的示例没有使用类型断言,因此对象值的类型应该是string | number,这可能不是您需要的。

我们使用
keyof typeof
来获取对象键的类型。

索引.ts
const employee = { id: 1, name: 'James Doe', salary: 100, } as const; // 👇️ type Keys = "id" | "name" | "salary" type Keys = keyof typeof employee; // 👇️ type Values = 1 | "James Doe" | 100 type Values = typeof employee[Keys];

keyof typeof语法返回一个类型,该类型将对象的所有键表示为字符串。

为了获得对象值的类型,我们使用方括号并使用键的类型为对象建立索引。

您也可以使用这种方法来获取对应于特定属性的值的类型。

索引.ts
const employee = { id: 1, name: 'James Doe', salary: 100, } as const; // 👇️ type Keys = "id" | "name" | "salary" type Keys = keyof typeof employee; // 👇️ type Values = 1 | "James Doe" | 100 type Values = typeof employee[Keys]; // 👇️ type V1 = 1 type V1 = typeof employee['id']; // 👇️ type V2 = "James Doe" type V2 = typeof employee['name']; // 👇️ type V3 = 100 type V3 = typeof employee['salary'];