ts类型体操通关(简单)

193 阅读1分钟

练习地址

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