TypeScript 提供了一些高级类型特性,这些特性使得在类型系统中可以更灵活地表示和操作类型。以下是一些 TypeScript 中常见的高级类型:

1. 交叉类型(Intersection Types):
   交叉类型表示一个值可以同时具有多种类型。使用 & 运算符连接多个类型。
   type Point = { x: number; y: number };
   type Color = { color: string };

   type ColoredPoint = Point & Color;

   let coloredPoint: ColoredPoint = { x: 1, y: 2, color: "red" };

2. 联合类型(Union Types):
   联合类型表示一个值可以是多个类型中的一种。使用 | 运算符连接多个类型。
   type Result = number | string;

   let result1: Result = 42;
   let result2: Result = "success";

3. 类型别名(Type Aliases):
   使用 type 关键字可以为一个类型起一个新的名字。
   type Age = number;
   type Person = { name: string; age: Age };

   let person: Person = { name: "Alice", age: 25 };

4. 映射类型(Mapped Types):
   通过映射现有类型的属性来创建新类型。常见的映射类型有 Partial、Readonly 和 Record。
   type PartialPerson = Partial<Person>; // 所有属性变为可选
   type ReadonlyPerson = Readonly<Person>; // 所有属性变为只读
   type RecordOfNumbers = Record<string, number>; // 创建一个字符串索引的数字类型

5. 条件类型(Conditional Types):
   根据条件选择两种类型中的一种。使用条件类型可以实现更高级的类型推断。
   type NonNullable<T> = T extends null | undefined ? never : T;

   type Result = NonNullable<string | null | undefined>; // 类型推断为 string

6. 显式类型断言(Type Assertion):
   使用 as 关键字可以将一个值断言为某个类型。
   let value: any = "hello";
   let length: number = (value as string).length;

7. 可辨识联合(Discriminated Unions):
   通过在联合类型的成员中添加一个共同的字段来确定联合类型中的具体类型。
   type Shape = { kind: "circle"; radius: number } | { kind: "square"; sideLength: number };

   function getArea(shape: Shape): number {
       switch (shape.kind) {
           case "circle":
               return Math.PI * shape.radius ** 2;
           case "square":
               return shape.sideLength ** 2;
       }
   }

8. 不可变性和深度不可变性:
   TypeScript 提供 Readonly 和 DeepReadonly 类型,用于创建只读对象和深度只读对象。
   type ReadonlyPerson = Readonly<Person>;
   type DeepReadonlyPerson = DeepReadonly<Person>;

这些是 TypeScript 中一些常见的高级类型。它们允许你更灵活地操作和表示类型,提高了代码的可读性和可维护性。深入了解这些高级类型对于处理复杂的类型场景非常有帮助。


转载请注明出处:http://www.zyzy.cn/article/detail/4702/TypeScript