• 作者:老汪软件技巧
  • 发表时间:2024-12-03 17:03
  • 浏览量:

在 TypeScript 中,条件类型和映射类型是强大的类型工具,它们允许开发者根据类型的条件和映射对象类型的属性来创建新的类型。下面是对这两种类型的详细解释和示例。

1. 条件类型

条件类型允许根据某些条件来选择类型。基本语法如下:

T extends U ? X : Y

示例

type IsString = T extends string ? "Yes" : "No";
// 使用条件类型
type A = IsString<string>;  // "Yes"
type B = IsString<number>;  // "No"

在这个例子中,IsString 是一个条件类型,它检查类型 T 是否为 string,如果是,则返回 "Yes",否则返回 "No"。

2. 映射类型

映射类型允许创建一个新类型,该类型的属性是基于现有类型的属性。基本语法如下:

{ [K in keyof T]: X }

示例

type Person = {
    name: string;
    age: number;
};
// 映射类型,创建一个所有属性都是 string 类型的类型
type PersonStrings = {
    [K in keyof Person]: string;
};
// 结果是:

映射类对应关系_映射器可以定义参数类型_

// type PersonStrings = { // name: string; // age: string; // }

在这个例子中,PersonStrings 是一个映射类型,它将 Person 类型的所有属性都映射为 string 类型。

结合使用条件类型和映射类型

可以将条件类型与映射类型结合使用,以创建更复杂的类型逻辑。

示例

type Person = {
    name: string;
    age: number;
    isActive: boolean;
};
// 创建一个只包含字符串类型属性的映射类型
type StringProperties = {
    [K in keyof T]: T[K] extends string ? T[K] : never;
};
type PersonStringProps = StringProperties<Person>;
// 结果是:
// type PersonStringProps = {
//     name: string;
//     age: never;
//     isActive: never;
// }

在这个例子中,StringProperties 是一个映射类型,它检查 T 的每个属性,如果属性是 string,则保留该属性的类型,否则使用 never。最终的 PersonStringProps 类型只保留了 name 属性。

总结