📜  typescript 实用程序类型合并接口 - TypeScript (1)

📅  最后修改于: 2023-12-03 14:48:05.154000             🧑  作者: Mango

TypeScript 实用程序类型合并接口

在 TypeScript 中,我们很常见到需要将多个类型进行合并或交叉的情况,为了方便,我们可以使用 TypeScript 的实用程序类型进行快速操作。

Partial

Partial 可以将一个类型中所有的属性变为可选的,使用范例如下:

interface Person {
  name: string;
  age: number;
}

type PartialPerson = Partial<Person>;

// 等价于

interface PartialPerson {
  name?: string;
  age?: number;
}

在上述例子中,我们可以看到 Partial 的作用是将 Person 中的属性变成可选属性。

Required

相对于 Partial,Required 则可以将一个类型中所有的可选属性变成必选属性,使用范例如下:

interface Person {
  name?: string;
  age?: number;
}

type RequiredPerson = Required<Person>;

// 等价于

interface RequiredPerson {
  name: string;
  age: number;
}
Readonly

Readonly 可以将一个类型中所有的属性变成只读的,使用范例如下:

interface Person {
  name: string;
  age: number;
}

type ReadonlyPerson = Readonly<Person>;

// 等价于

interface ReadonlyPerson {
  readonly name: string;
  readonly age: number;
}

在上面的例子中,我们可以看到 Readonly 将 Person 中的所有属性都变成了只读的。

Record

Record 可以将一个类型中的每个属性都映射成一个指定的类型,使用范例如下:

type Person = 'Tom' | 'Bob' | 'Alice';
type Age = number;

type RecordPerson = Record<Person, Age>;

/*
等价于

interface RecordPerson {
  Tom: number;
  Bob: number;
  Alice: number;
}
*/

这里我们将每个人名都映射成了一个年龄。

Pick

Pick 可以从一个类型中选择出指定的属性构造一个新类型,使用范例如下:

interface Person {
  name: string;
  age: number;
  gender: string;
}

type NameAndAge = Pick<Person, 'name' | 'age'>;

// 等价于

interface NameAndAge {
  name: string;
  age: number;
}

在上述的例子中,我们从 Person 中选择了 name 和 age 两个属性构造出了一个新类型。

Omit

Omit 可以从一个类型中移除指定的属性构造一个新类型,使用范例如下:

interface Person {
  name: string;
  age: number;
  gender: string;
}

type NameAndGender = Omit<Person, 'age'>;

// 等价于

interface NameAndGender {
  name: string;
  gender: string;
}

在上述例子中,我们从 Person 中移除了 age 属性构造出了新类型。

总的来说,TypeScript 中的实用程序类型大大简化了我们的代码编写,使得编写代码更加高效、简洁。