【TypeScript高级类型简介以及使用方法】

发布于:2024-05-10 ⋅ 阅读:(28) ⋅ 点赞:(0)

TypeScript 的高级类型提供了更复杂的类型系统,允许开发者更精确地描述和约束代码中的数据类型。以下是几种常用的 TypeScript 高级类型及其简介和使用方法:

  1. 交叉类型(Intersection Types)

交叉类型是将多个类型合并为一个类型,它包含了所有类型的特性。通过 & 符号定义。

type Person = {
  name: string;
};

type Serializable = {
  serialize(): string;
};

type PersonSerializable = Person & Serializable;

const p: PersonSerializable = {
  name: "Alice",
  serialize() {
    return JSON.stringify(this);
  }
};
  1. 联合类型(Union Types)

联合类型表示一个值可以是几种类型之一。通过 | 符号定义。

type StringOrNumber = string | number;

const value: StringOrNumber = Math.random() > 0.5 ? "hello" : 123;
  1. 映射类型(Mapped Types)

映射类型允许你基于一个已存在的类型来创建新的类型。这通常用于对象类型的转换。

type KeysToOptional<T> = {
  [P in keyof T]?: T[P];
};

type PartialPerson = KeysToOptional<Person>;

const partialPerson: PartialPerson = {
  name: "Bob"
}; // 注意age没有赋值也是允许的
  1. 条件类型(Conditional Types)

条件类型根据条件来返回不同的类型。

type IsString<T> = T extends string ? true : false;

const isString: IsString<string> = true;
const isNotString: IsString<number> = false;
  1. 可辨识联合(Discriminated Unions)

可辨识联合是一种特殊的联合类型,其中的每个成员都有一个共同的属性(称为“可辨识的属性”),该属性的值在联合的所有成员中都是唯一的。

interface Square {
  kind: "square";
  size: number;
}

interface Circle {
  kind: "circle";
  radius: number;
}

type Shape = Square | Circle;

function area(s: Shape) {
  switch (s.kind) {
    case "square":
      return s.size * s.size;
    case "circle":
      return Math.PI * s.radius * s.radius;
  }
}
  1. 模板字面量类型(Template Literal Types)

模板字面量类型允许你在类型中使用模板字面量的语法。这在处理字符串时非常有用。

type Greeting = `Hello, ${string}!`;

const greeting: Greeting = `Hello, world!`;

这些高级类型提供了更强大的类型检查和更精确的类型描述,可以帮助你编写更健壮、更易于维护的 TypeScript 代码。


网站公告

今日签到

点亮在社区的每一天
去签到