前言

ts 提供了很多工具类型

工具类型

Partial 部分类型

  1. interface User {
  2. id: number;
  3. name: string;
  4. }
  5. const user: User = {
  6. name: "test"
  7. } // 会报错,需要用 Partial 工具包起来,表示是 User 类型的一部分
  8. const user: Partial<User> = {
  9. name: "test"
  10. }

Required 必填类型

  1. interface User {
  2. id?: number;
  3. name: string;
  4. }
  5. const user: Required<User> = {
  6. name: "test"
  7. } // 报错,要求必须有 id
  8. // Property 'id' is missing in type '{ name: string; }' but required in type 'Required<User>'.

Readonly 只读类型

  1. interface User {
  2. id: number;
  3. name: string;
  4. }
  5. const user: Readonly<User> = {
  6. id: 123,
  7. name: "test"
  8. }
  9. user.id = 456; // 报错 Cannot assign to 'id' because it is a read-only property

Pick 获取 key 类型(和对象有关)

  1. interface User {
  2. id: number;
  3. name: string;
  4. age: number;
  5. }
  6. type God = Pick<User, 'id' | 'name'>
  7. // 等同于
  8. // type God = {
  9. // id: number;
  10. // name: string;
  11. // }

Omit 排除 key 类型(和对象有关)

和 pick 相反的操作

  1. interface User {
  2. id: number;
  3. name: string;
  4. age: number;
  5. }
  6. type God = Omit<User, 'age'>
  7. // 等同于
  8. // type God = {
  9. // id: number;
  10. // name: string;
  11. // }

Exclude 排除值类型

  1. type Direction = '东' | '南' | '西' | '北';
  2. type Direction2 = Exclude<Direction, '东'>;
  3. // 等同于
  4. // type Direction2 = "南" | "西" | "北"

Extract 提取值类型

和 exclude 相反

  1. type Direction = '东' | '南' | '西' | '北';
  2. type Direction2 = Extract<Direction, '南' | '西' | '北'>
  3. // 等同于
  4. // type Direction2 = "南" | "西" | "北"

ReturnType 返回值类型

  1. function f(a: number, b: number) {
  2. return a + b;
  3. }
  4. type A = ReturnType<typeof f>;
  5. // type A = number

Record 类型

  1. type A = Record<string, number>;
  2. // 等同于
  3. // type A = {
  4. // [x: string]: number;
  5. // }