Skip to main content

TS-泛型工具集

in#

数组转合集#

type TupleToUnion<T extends readonly unknown[]> = T[number]
// TupleToUnion<Arr> // expected to be '1' | '2' | '3'

获取数组长度#

type Length<T extends readonly unknown[]> = T['length']
// Length<[0,0,0]>  // expected 3

数组转对象#

type TupleToObject<T extends readonly unknown[]> = {  [P in T[number]]: P}
// TupleToObject<['a','b','c']> // expected {a:'a', b:'b', c:'c'  }

获取数组第一个元素#

type First<T extends readonly unknown[]> = T['length'] extends 0 ? never : T[0]
// First<['a', 'b', 'c']]> // expected to be 'a'

拼接两个数组#

type Concat<T extends unknown[], U extends unknown[]> = [...T, ...U]
// Concat<['a', 'b'], ['c']]> // expected to be ['a', 'b', 'c']

Includes#

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

获取 Promise 返回值#

type Awaited<T> = T extends Promise<infer U> ? U : never

获取 Promise 返回值 (递归)#

type AwaitedDeep<T> = T extends Promise<infer U> ? (U extends Promise<unknown> ? Awaited<U> : U) : never

IF 判断#

type If<C extends boolean, T, F> = C extends true ? T : F
// type A = If<true, 'a', 'b'>  // expected to be 'a'// type B = If<false, 'a', 'b'> // expected to be 'b'