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

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 代码。

相关推荐

  1. TypeScript高级类型简介以及使用方法

    2024-05-10 21:36:01       33 阅读
  2. TypeScript类型推论简介以及使用方法

    2024-05-10 21:36:01       33 阅读
  3. TypeScript枚举简介以及使用方法

    2024-05-10 21:36:01       32 阅读
  4. TypeScript函数简介以及使用方法

    2024-05-10 21:36:01       38 阅读
  5. TypeScript模块简介以及使用方法

    2024-05-10 21:36:01       29 阅读
  6. TypeScript声明合并简介以及使用方法

    2024-05-10 21:36:01       39 阅读
  7. 【sass数字运算简介以及使用方法

    2024-05-10 21:36:01       34 阅读
  8. Typescript高级: 深入理解Extract类型

    2024-05-10 21:36:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 21:36:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 21:36:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 21:36:01       82 阅读
  4. Python语言-面向对象

    2024-05-10 21:36:01       91 阅读

热门阅读

  1. 洛谷P10397题解

    2024-05-10 21:36:01       29 阅读
  2. CF988D题解

    2024-05-10 21:36:01       22 阅读
  3. React 第二十八章 前端框架

    2024-05-10 21:36:01       30 阅读
  4. 按键精灵写的有点失败了

    2024-05-10 21:36:01       25 阅读
  5. 关于学习与智慧

    2024-05-10 21:36:01       30 阅读
  6. 说说SpringBoot自动配置原理

    2024-05-10 21:36:01       38 阅读
  7. thinkphp5 中路由常见的使用方法

    2024-05-10 21:36:01       31 阅读