Type-challenges题目(第三部分)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Type-challenges题目(第三部分)相关的知识,希望对你有一定的参考价值。
Type-challenges题目(第三部分)
3060 Unshift
用扩展运算符即可。
type Unshift<T extends any[], U> = [U,...T]
3312 Parameters
使用infer 推导即可。
type MyParameters<T extends (...args: any[]) => any> = T extends (...args: infer U) => any?U:never;
2 获取函数返回类型
就是extends 一个函数模板,然后使用infer U即可。
type MyReturnType<T extends (...args :any[]) => any > = T extends (...args :any[]) => infer U?U:never;
3 实现 Omit
type MyOmit<T, K> =
[P in keyof T as P extends K ? never : P]: T[P]
// or
type MyOmit<T, K> = Pick<T, Exclude<keyof T, K>>
8 Readonly 2
type MyReadonly2<T, K extends keyof T = keyof T> =
readonly [P in keyof T] : T[P]
&
[P in keyof T as Exclude<P, K>]: T[P]
// = 为泛型参数设置默认值
// 1. K extends keyof T 不成立时,赋值默认值 keyof T 给第二泛型参数
// 2. 先计算出一个只存在 readonly 字段的对象
// 3. 再通过内置工具类型 Omit,计算出不包含 K 的对象
// 4. 再使用 & 计算出两个类型的交叉类型()
type MyReadonly2<T, K extends keyof T = keyof T> =
+readonly [P in K]: T[P]
& Omit<T, K>
9 深度 Readonly
使用递归即可。判当前是对象还是某一个属性。
type DeepReadonly<T> =
readonly [P in keyof T]: keyof T[P] extends never ? T[P] : DeepReadonly<T[P]>
以上是关于Type-challenges题目(第三部分)的主要内容,如果未能解决你的问题,请参考以下文章