4・实现 Pick
type MyPick<T, K extends keyof T> = { [p in K]: T[p] }
7・实现 Readonly
type Readonly<T> = { readonly [p in T]: T[p] }
11・元组转换为对象
type TupleToObject<T extends readonly any[]> = { [p in T[number]]: p }
14・第一个元素
type First<T extends any[]> = T['length'] extends 0 ? never : T[0]
18・获取元组长度
type Length<T extends readonly any[]> = T['length']
43・Exclude
type MyExclude<T, U> = T extends U ? never : T
189・Awaited
type MyAwaited<T extends Promise<any>> = T extends Promise<infer P> ? P extends Promise<any> ? MyAwaited<P> : P : never
268・If
type If<C extends boolean, T, F> = C extends true ? T : F
533・Concat
type Concat<T extends any[], U extends any[]> = [...T, ...U]
898・Includes
type Includes<T extends readonly any[], U> = T extends [infer F, ...infer E] ? Equal<F, U> extends true ? true : Includes<E, U> : false
有一些解法没有通过所有用例,也贴在下面
1、 type Includes<T extends readonly any[], U> = T extends Array<infer K> ? U extends K ? true : false : false;
2、 type Includes<T extends readonly any[], U> = U extends T['number'] ? true : false
3057・Push
type Push<T extends any[], U> = [...T, U]
3060・Unshift
type Unshift<T extends any[], U> = [U, ...T]
3312・Parameters
type MyParameters<T extends (...args: any[]) => any> = T extends (...args: infer P) => any ? P : never