TS 内置的 所有工具类型

Partial<T>

将 T 中的所有属性设置为可选

type Partial<T> = { [P in keyof T]?: T[P] | undefined; }
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Partial<User>;

re:
type NewType = {
    name?: string | undefined;
    sex?: string | undefined;
    age?: number | undefined;
}

Readonly<T>

将 T 中的所有属性设置为只读

type Readonly<T> = { readonly [P in keyof T]: T[P]; }
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Readonly<User>;

re:
type NewType = {
    readonly name: string;
    readonly sex: string;
    readonly age: number;
}

Required<T>

将 T 中的所有属性设置为必须

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

-? 表示取消可选

eg:
interface User {
  name: string;
  sex?: string;
  age?: number;
}
type NewType = Required<User>;

re:
type NewType = {
    name: string;
    sex: string;
    age: number;
}

Pick<T, K>

从 T 中,选择一组位于 K 中的属性

type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Pick<User, 'name' | 'sex'>;

re:
type NewType = {
    name: string;
    sex: string;
}

Exclude<T, U>

从 T 中排除可分配给 U 的类型

type Exclude<T, U> = T extends U ? never : T;
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Exclude<keyof User, 'name' | 'sex'>;

re:
type NewType = "age"

Extract<T, U>

从 T 中提取可分配给 U 的类型

type Extract<T, U> = T extends U ? T : never;
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Extract<keyof User, 'name' | 'sex'>;

re:
type NewType = "name" | "sex"

Omit<T, K>

构造一个属性为 T 的类型,但类型 K 中的属性除外

type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Omit<User, 'name' | 'sex'>;

re:
type NewType = {
    age: number;
}

Record<T, K>

使用类型为 T 的一组属性 K 构造一个类型

type Record<K extends keyof any, T> = {
    [P in K]: T;
};
eg:
interface User {
  name: string;
  sex: string;
  age: number;
}
type NewType = Record<string, User>;

re:
type NewType = {
    [x: string]: User;
}

NonNullable<T>

从 T 中排除 null 和 undefined

type NonNullable<T> = T extends null | undefined ? never : T;
eg:
type name = string | null | undefined;
type newType = NonNullable<name>;

re:
type newType = string

ReturnType<T>

获取函数类型的返回类型

type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;
eg:
interface User {
  name: string;
  sex: string;
  age: number;
  getFamily: (name: string) => User[];
}
type NewType = ReturnType<User['getFamily']>;

re:
type NewType = User[]

Parameters<T>

获取函数类型的参数,返回的是个元组

type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
eg:
interface User {
  name: string;
  sex: string;
  age: number;
  getFamily: (name: string) => User[];
}
type NewType = ReturnType<User['getFamily']>;

re:
type NewType = [name: string]

InstanceType<T>

获取构造函数函数类型的返回类型

type InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;
eg:
type NewType = InstanceType<new (name: string) => { name: string; age: number }>;

re:
type NewType = {
    name: string;
    age: number;
}

ConstructorParameters<T>

获取构造函数类型的参数,返回的是个元组

type ConstructorParameters<T extends abstract new (...args: any) => any> = T extends abstract new (...args: infer P) => any ? P : never;
eg:
type NewType = ConstructorParameters<new (name: string) => { name: string; age: number }>;

re:
type NewType = [name: string]

大小写

type NewType = Uppercase<'aaa'>; // AAA  全大写
type NewType = Lowercase<'AAA'>; // aaa   全小写
type NewType = Capitalize<'aaa'>; // Aaa   首字母大写
type NewType = Uncapitalize<'AAA'>; // aAA   首字母小写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值