1. 程式人生 > 其它 >TS泛型工具

TS泛型工具

/**
 * ts泛型工具 內建型別定義
 */

// Partial的作用是將傳入的屬性變成可選項,原理就是使用keyof拿到所有的屬性名,然後在使用in遍歷,T[P]拿到相應的值
type Partial<T> = {[P in keyof T]?: T[P]};

// Required的作用是將傳入的屬性變為必選項,原理就是使用-?,將可選項的?去掉。與之對應的還有個+?
type Required<T> = {[P in keyof T]-?: T[P]};

// Readonly的作用是將傳入的屬性變為只讀選項
type Readonly<T> = {readonly
[P in keyof T]: T[P]}; // Pick的作用是從T中取出一系列K的屬性 type Pick<T, K extends keyof T> = { [P in K]: T[P] }; // Record的作用是將K中所有屬性的值轉化成T型別 type Record<K extends keyof any, T> = {[P in K]: T}; // Exclude的作用是從T中找出U中沒有的元素 type Exclude<T, U> = T extends U ? never : T; // Extract的作用是從T中找出U中所有的元素 type Extract<T, U> = T extends U ? T : never;
// ReturnType的作用是用來得到一個函式的返回值型別 type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any; // ThisType用於指定上下文物件型別 interface ThisType<T> {} // InstanceType的作用是獲取一個類的例項型別,可以用獲取到的例項型別來約束一個變數的賦值必須和類的成員型別完全一樣才可以 type InstanceType<T extends new (...args: any[]) => any> = T extends new
(...args: any[]) => infer R ? R : any; // NonNullable的作用是去除 T 中包含的null或者undefined type NonNullable<T> = T extends null | undefined ? never : T; // Parameters的作用是用來獲取一個函式的引數型別,而且返回的是隻能包含一組型別的陣列 type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never; // ConstructorParameters的作用是用來獲取一個類的建構函式引數型別,並以陣列的形式返回 type ConstructorParameters<T extends new (...args: any[]) => any> = T extends new (...args: infer P) => any ? P : never; /** * ts泛型工具 非內建型別定義 */ // Omit的作用是忽略物件的某些屬性功能 type Omit<T, K> = Pick<T, Exclude<keyof T, K>>; // DeepReadonly用來深度遍歷 T,並將其所有屬性變成只讀型別 type DeepReadonly<T> = { readonly [P in keyof T]: DeepReadonly<T[P]> }; // ConvertNumberToString用來將number轉換為string型別 type ConvertNumberToString<T> = {[K in keyof T]: T[K] extends string ? string : T[K]}; // ValueOf與keyof相對應。取出指定型別的所有 value type ValueOf<T> = T[keyof T]; // 用來將所有屬性的readonly移除 type Mutable<T> = { -readonly [P in keyof T]: T[P] };
以自己現在的努力程度,還沒有資格和別人拼天賦