TypeScript 类型定义-1

// pick: 从类型 T 中选择出属性 K,构造成一个新的类型。

type MyPick<T, keys extends keyof T> = {
    [K in keys]: T[K];
}

// Exclude: 从联合类型 T中排除 U的类型成员,来构造一个新的类型。

type MyExclude<T, U> = T extends U ? never : T;

// Parameters: 内置的 Parameters 类型

type MyParameters<T> = T extends (...args: infer U) => any ? U : never;

// Awaited: 有一个 Promise 对象,这个 Promise 对象会返回一个类型, 获取这个类型。

type MyAwaited<T> = T extends Promise<infer U> ? MyAwaited<U> : T;

// 数组转对象: 传入一个元组类型,将这个元组类型转换为对象类型,这个对象类型的键/值都是从元组中遍历出来。

type Arr2Obj<T extends any[]> = {
    [K in T[number]]: K;
}

// 获取数组长度

type ArrLength<T extends readonly unknown[]> = T['length'];

// Includes: 实现 JavaScript 的 Array.includes 方法

type Includes<T extends readonly unknown[], U> = U extends T[number] ? true : false;

// Concat: 实现 JavaScript 的 Array.concat 方法,这个类型接受两个参数,返回的新数组类型应该按照输入参数从左到右的顺序合并为一个新的数组。

type Concat<T extends readonly unknown[], U extends readonly unknown[]> = [...T, ...U];

// Push: 实现通用的 Array.push

type Push<T extends readonly unknown[], U> = [...T, U];

// Readonly: 接收一个泛型参数,并返回一个完全一样的类型,只是所有属性都会被 readonly 所修饰。

type MyReadonly<T> = {
    readonly [K in keyof T]: T[K];
}

// IF: 接收一个条件类型 T ,一个判断为真时的返回类型 P ,以及一个判断为假时的返回类型 U。

type If<T extends boolean, P, U> = T extends true ? P : U;

// 数组第一个元素

type First<T extends readonly unknown[]> = T[0] extends undefined ? never : T[0];
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容