Typescript 的类型工具

Typescript 的类型工具

记录一些常用的类型工具是怎样使用的以及怎样实现的。

Partial

//作用: Partial<T>将T的所有属性变成可选的。
// 实现:
type Partial<T> = {
  [P in keyof T]?: T[P];
}

Readonly

//作用: Readonly<T>将T的所有属性变成只读的。
// 实现:

type Readonly<T> = {
  readonly [P in keyof T]: T[P]
}

Pick

//作用:挑选一组属性并组成一个新的类型。
// 实现:
type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};

Record

//作用:构造一个type,key为联合类型中的每个子类型,类型为T
// 实现:
type Record<K extends keyof any, T> = {
  [P in K]: T
}

// 示例:

interface A {
  a: string,
  b: number,
}
interface B {
  key1: number,
  key2: string,
}
type Eg2 = Record<keyof A, B>

/**
 * @example
 * type Eg2 = {a: B, b: B}
 */

Exclude

//作用:提取存在于T,但不存在于U的类型组成的联合类型
//实现:
type Exclude<T, U> = T extends U ? never : T;

// 示例:
type Eg = Exclude<'key1' | 'key2', 'key2'>

/**
 * @example
 * type Eg = 'key1'
 */

Extract

//作用:提取联合类型T和联合类型U的所有交集。
//实现:
type Extract<T, U> = T extends U ? T : never;
//示例:

type Eg = Extract<'key1' | 'key2', 'key1'>

/**
 * @example
 *  type Eg = 'key1'
 */

Omit

//作用:从类型T中剔除K中的所有属性
//实现:
//方式一:
    type Omit = Pick<T, Exclude<keyof T, K>>;
    //方式二:
    type Omit2<T, K extends keyof any> = {
      [P in Exclude<keyof T, K>]: T[P]
    }
//示例:
type M1 = {
  name:string,
  age:number
}

type M2 = {
  name:string,
  hab:boolean
}

type M3 = Omit<M1,keyof M2>

//  type M3 = {
//     age: number;
// }

Parameters

//作用:获取函数的参数类型,将每个参数类型放在一个元组中。
// 实现:
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;

// 示例:

type Eg = Parameters<(arg1: string, arg2: number) => void>;
/**
 * @example
 * type Eg = [arg1: string, arg2: number];
 */

ReturnType

//作用: 获取函数的返回值类型
// 实现:
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值