TypeScript 映射类型简介
TypeScript 中的映射类型提供了一种通过转换现有类型来创建新类型的方法。它们是处理复杂类型操作和确保 TypeScript 应用程序中类型安全的强大工具。本文介绍了映射类型,解释了它们的语法,并提供了示例来演示它们的用法。
什么是映射类型?
映射类型允许通过对现有类型的每个属性应用转换来创建新类型。它们通常用于以灵活的方式修改或扩展类型。映射类型的基本语法是:
type MappedType = {
[K in keyof T]: NewType;
};
在此语法中:
T
是原始类型。K
代表T
中的每个键。NewType
是分配给每个属性的新类型。
映射类型的基本示例
这是一个映射类型的简单示例,它将给定类型的所有属性转换为只读:
type ReadOnly = {
readonly [K in keyof T]: T[K];
};
type User = {
name: string;
age: number;
};
type ReadOnlyUser = ReadOnly;
在此示例中,ReadOnly
映射类型将 User
类型的所有属性转换为只读,从而产生了一个新类型 ReadOnlyUser
,其中所有属性都是不可变的。
具有类型转换的映射类型
映射类型还可用于以更复杂的方式转换类型。例如,使所有属性都可选的映射类型:
type Partial = {
[K in keyof T]?: T[K];
};
type User = {
name: string;
age: number;
};
type PartialUser = Partial;
在这个例子中,Partial
映射类型使 User
类型的所有属性都成为可选的,从而产生了一个新类型 PartialUser
,其中每个属性都是可选的。
将映射类型与条件类型结合使用
映射类型可以与条件类型结合使用,以实现更复杂的类型操作。例如,创建仅包含特定类型的属性的类型:
type OnlyStrings = {
[K in keyof T]: T[K] extends string ? T[K] : never;
};
type User = {
name: string;
age: number;
email: string;
};
type StringProperties = OnlyStrings;
在此示例中,OnlyStrings
映射类型过滤掉了不属于 string
类型的属性,从而产生了一个新类型 StringProperties
,其中仅包含来自 User
类型的字符串属性。
高级映射类型
映射类型的高级用例包括创建根据各种条件修改现有类型的类型。例如,为每个属性名称添加后缀的映射类型:
type WithSuffix<T, S extends string> = {
[K in keyof T as `${string & K}${S}`]: T[K];
};
type User = {
name: string;
age: number;
};
type UserWithSuffix = WithSuffix<User, "Prop">;
在此示例中,WithSuffix
映射类型为 User
类型的每个属性名称添加后缀,从而产生一个新类型 UserWithSuffix
,其中属性名称具有指定的后缀。
结论
TypeScript 中的映射类型是一种多功能功能,可让开发人员通过转换现有类型来创建新类型。通过理解和利用映射类型,开发人员可以管理复杂的类型转换并确保其 TypeScript 代码中的更高类型安全性。映射类型提供了强大的功能,可用于增强和自定义 TypeScript 应用程序中的类型定义。