乐闻世界logo
搜索文章和话题

How can you use mapped types in TypeScript?

2 个月前提问
2 个月前修改
浏览次数15

1个答案

1

在TypeScript中,映射类型是一种强大的功能,它允许从旧类型中创建新类型,通过以属性为单位进行转换来实现。这种类型的操作使得代码更加灵活和可复用。映射类型的基本形式是利用索引签名语法来动态定义属性和它们的类型。

映射类型的基本用法

下面是一个简单的例子来说明如何使用映射类型:

typescript
interface Person { name: string; age: number; } // 使用映射类型来创建一个新类型,其中所有属性都是可选的 type PartialPerson = { [P in keyof Person]?: Person[P]; } // 使用映射类型将所有属性转为只读 type ReadonlyPerson = { [P in keyof Person]: Readonly<Person[P]>; } // 实例化 const person: PartialPerson = { name: "Alice", // age是可选的 }; const person2: ReadonlyPerson = { name: "Bob", age: 30 }; // person2.name = "Charlie"; // 错误:不能修改只读属性

在这个例子中:

  • PartialPerson 类型将 Person 类型中的所有属性都变为了可选的。
  • ReadonlyPerson 类型则将 Person 类型中的所有属性变成了只读的。

高级映射类型用法

TypeScript 还允许更复杂的操作,比如根据条件筛选属性或修改属性的类型。下面是更高级的映射类型用法示例:

typescript
type FilterByType<T, U> = { [P in keyof T as T[P] extends U ? P : never]: T[P]; }; interface Info { name: string; age: number; hasPet: boolean; } // 从Info中筛选出所有类型为number的属性 type NumbersOnly = FilterByType<Info, number>; const example: NumbersOnly = { age: 25 };

在这个高级用法中,FilterByType 映射类型允许筛选出符合特定类型的属性。通过这种方式,我们可以根据需求动态创建具有特定特征的类型。

映射类型的这些用法大大增强了TypeScript的表达能力,使得开发者可以编写更加通用和灵活的类型安全代码。

2024年7月23日 17:35 回复

你的答案