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题目(第三部分)的主要内容,如果未能解决你的问题,请参考以下文章

Type-challenges(第二部分)

TypeScript 杂记二 《类型体操》

BuuCTF Web Writeup 第三部分

第三次 结构部分

第三次结构部分

Contest1593 - 2018-2019赛季多校联合新生训练赛第三场(部分题解)