小丞同学

Results 19 issues of 小丞同学

遍历泛型 U,判断是否有 type 为 T 的即可 ```ts type LookUp = U extends { type: T} ? U : never ```

answer
zh-CN
62

核心在于处理这个泛型 T,利用类型推断,会得到一个参数类型数组 T,类似于传入 `[1,2]` T 就是 `[number, number]` 后续只需要遍历匹配数组即可 > 遍历数组这里的 P 就是它的 index ```ts declare function PromiseAll(values: readonly [...T]): Promise ```

answer
zh-CN
20

用 infer 推出前面的即可,把最后一个单独弄出来 ```ts type Pop = T extends [...infer R, any] ? R : never ```

answer
zh-CN
16

解答:很简单,用 infer 推断一下最后一个参数就好 ```ts type Last = T extends [...any[], infer R] ? R: never ```

answer
zh-CN
15

解答:有点难,需要注意 key 重复的情况,会按照后面的类型来定义。将 option 的两个参数设置为 泛型,来判断是否存在于当前的对象中,类似去重,然后返回相应的 value 类型 可以理解为这是一个 class,T 是其中的一个对象,保存了所有的 key value 组合 ```ts type Chainable = { option( key: K extends keyof T ? T[K] extends V ?...

answer
zh-CN
12

通过 infer 来推断数组中每一项的类型 ```ts type TupleToUnion = T extends (infer R)[] ? R :never ```

answer
zh-CN
10

解答:通过判断 value 的类型,来递归添加 readonly ```ts type DeepReadonly = { readonly [P in keyof T]: T[P] extends Object ? T[P] extends Function ? T[P]: DeepReadonly : T[P] } // 也可以用 keyof...

answer
zh-CN
9

解答:这题需要结合上一题,需要判断当前的 key 是不是 K 中传入的,如果是 K 中的,那么需要设置为 readonly,要主要其他的也要保持原来的类型。需要注意,当 K 不传入时,所有都需要是 readonly ,因此可以设置 K 为 T ```ts type MyReadonly2 = { readonly [P in K]: T[P] } & { [P in...

answer
zh-CN
8

通过 infer 来推断返回参数的类型 ```ts type MyReturnType = T extends (...args: any) => infer R ? R : never ```

answer
2
zh-CN