TS工具类型

115 阅读1分钟

TS工具类型

Partial<T> 部分类型

将类型 T 中的所有属性变为可选属性

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

type PartialPerson = Partial<Person>

// PartialPerson 的类型为 
// { 
//    name?: string | undefined; 
//    age?: number | undefined; 
// }

Required<T> 必填类型

将类型 T 中所有属性变为必选属性。

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

type RequiredPerson = Required<Person>;

// RequiredPerson 的类型为
// {
//   name: string;
//   age: number;
// }

Readonly<T> 只读类型

将类型 T 中所有属性变为只读属性。

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

type ReadonlyPerson = Readonly<Person>

// ReadonlyPerson 的类型为
// {
//   readonly name: string;
//   readonly age: number;
// }

Record<K, T>

创建一个类型,其中属性名为 K 的类型为 T

type User = "Alice" | "Bob" | "Charlie";
type UserMap = Record<User, { age: number; address: string }>;

// UserMap 的类型为
// {
//   Alice: { age: number; address: string; };
//   Bob: { age: number; address: string; };
//   Charlie: { age: number; address: string; };
// }

Exclude<T, U> 排除类型

从类型 T 中排除类型 U 中包含的属性。

type User = "Alice" | "Bob" | "Charlie";
type AdminUser = "Bob";

type NonAdminUser = Exclude<User, AdminUser>;

// NonAdminUser 的类型为 "Alice" | "Charlie"

Extract<T, U> 提取类型

从类型 T 中提取类型 U 中包含的属性。

type User = "Alice" | "Bob" | "Charlie";
type AdminUser = "Bob";

type AdminOnly = Extract<User, AdminUser>;

// AdminOnly 的类型为 "Bob"

Pick<T, K> 提取 key 类型

从类型 T 中选取指定的属性 K 并返回一个新的类型。

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

type BasicPerson = Pick<Person, "name" | "age">;

// BasicPerson 的类型为
// {
//   name: string;
//   age: number;
// }

Omit<T, K> 排除 key 类型

从类型 T 中删除指定的属性 K 并返回一个新的类型。

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

type BasicPerson = Omit<Person, "address" | "email">;

// BasicPerson 的类型为
// {
//   name: string;
//   age: number;
// }

Exclude/Extract用于type

Pick/Omit 用于 interface

ReturnType<T> 返回值类型

获取函数 T 的返回类型。

function add(a: number, b: number): number {
  return a + b;
}

type AddReturnType = ReturnType<typeof add>;

// AddReturnType 的类型为 number