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']
#
Includestype 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'