返回

TypeScript 揭秘:揭秘 Mapped types 的幕后故事

前端

揭秘 Mapped types 的奥秘

在 TypeScript 中,Mapped types 允许您定义新的类型,该类型由一个或多个现有类型的属性组成。它提供了强大的灵活性,让您能够轻松地创建复杂的类型,并执行各种操作,例如过滤、映射和转换数据。

Mapped types 的语法为:

{ [P in K]: T[P] }

其中:

  • K :类型变量,表示要遍历的类型中的属性的名称。
  • P :类型变量,表示遍历过程中每个属性的名称。
  • T :类型变量,表示每个属性的类型。

K、P 和 T 的含义

K:类型变量

K 是一个类型变量,它表示要遍历的类型中的属性的名称。例如,如果要遍历一个名为 User 的接口,则 K 可以是 User 接口的属性的名称,例如 nameageaddress

P:类型变量

P 是一个类型变量,它表示遍历过程中每个属性的名称。例如,如果要遍历 User 接口,则 P 可以是 User 接口的每个属性的名称,例如 nameageaddress

T:类型变量

T 是一个类型变量,它表示每个属性的类型。例如,如果要遍历 User 接口,则 T 可以是 User 接口的每个属性的类型,例如 stringnumberAddress

Mapped types 的示例

以下是一些 Mapped types 的示例:

// 创建一个新的类型,该类型包含 `User` 接口的所有属性,但属性类型为 `string`。
type UserWithStringProperties = { [P in keyof User]: string };

// 创建一个新的类型,该类型包含 `User` 接口的所有属性,但属性类型为 `User` 接口的属性类型的子类型。
type UserWithSubtypeProperties = { [P in keyof User]: User[P] extends object ? User[P] : string };

// 创建一个新的类型,该类型包含 `User` 接口的所有属性,但属性类型为 `User` 接口的属性类型的数组。
type UserWithArrayProperties = { [P in keyof User]: User[P][] };

结论

Mapped types 是 TypeScript 中一项强大的功能,它允许您轻松地创建复杂类型,并执行各种操作,例如过滤、映射和转换数据。通过理解 K、P 和 T 的含义,并掌握 Mapped types 的语法,您可以充分利用此功能,在 TypeScript 项目中创建出更灵活、更强大的代码。