完成🔥
13 Hello World
type HelloWorld = string;
4 Pick
type MyPick<T extends Record<any, any>, K extends keyof T> = { [key in K]: T[key]}
需要考虑对 T和 K做一些限制。
7 Readonly
type MyReadonly<T> = { readonly [k in keyof T]: T[k]}
type MyReadonly<T> = { +readonly [k in keyof T]: T[k]}
- + 号的用法

11 Tuple to Object
type TupleToObject<T extends readonly any[]> = { [K in T[number]]: K }
14 First of Array
type First<T extends any[]> = T['length'] extends 0 ? never: T[0];
一开始以为 T[0]就完事了,但是还要考虑到数组为空的情况,数组为空的类型为 never[]此时就应该是 never。
18 Length of Tuple
type Length<T extends readonly unknown[]> = 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 U> ? (U extends Promise<any> ? MyAwaited<U> : U) : T
用到递归
268 If
type If<C extends boolean, T, F> = C extends true ? T : F;
533 Concat
type Concat<T extends readonly unknown[], U extends unknown[]> = [...T, ...U];
898 Includes
type Includes<T extends readonly any[], U> = T extends [infer R1, ...(infer R2)]
? (Equal<R1, U>) extends true ? true : Includes<R2, U>
: false;
这题怎么也应该算个 medium 吧
- Equal
3057 Push
type Push<T extends readonly unknown[], U> = [...T, U];
3060 Unshift
和 3057 差不多
type Unshift<T extends readonly unknown[], U> = [U, ...T];
3312 Parameters
type MyParameters<T extends (...args: any[]) => any> = T extends (...args: infer R) => any ? R : never;
infer 登场。
