Type Challenges -- TS 练习题之 Easy 篇答案

725 阅读1分钟

Type Challenges -- TS 练习题之 Easy 篇答案

感谢 type-challenges 提供的题目

前言

点击查看题目

建议 fork 原仓库地址在本地进行答题
原仓库地址:type-challenges
答案仓库地址: github.com/fortress-fi…

相关文章

Type Challenges -- TS 练习题之 Easy 篇答案
Type Challenges -- TS 练习题之 Medium 篇答案 (持续更新)
Type Challenges -- TS 练习题之 Hard 篇答案 (持续更新)

Easy


00004-easy-pick

/* _____________ Your Code Here _____________ */

type MyPick<T, K extends keyof T> = {
     [P in K]: T[P]
}

00007-easy-readonly

/* _____________ Your Code Here ____________ */

type MyReadonly<T> = {
  readonly [P in keyof T]: T[P]
}

00011-easy-tuple-to-object

type TupleToObject<T extends readonly string[]> = {
  [P in T[number]]: P
}

00014-easy-first

// type First<T extends any[]> = T['length'] extends 0 ? never : T[0]

type First<T extends any[]> = T extends [] ? never : T[0]

00018-easy-tuple-length

type Length<T extends readonly any[]> = T['length']

00043-easy-exclude

type MyExclude<T, U> = T extends U ? never : T

00898-easy-includes

// 此处实现 Equal 的方法存疑
// 关于如何实现 Equal 的讨论:https://github.com/microsoft/TypeScript/issues/27024

type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y
  ? 1
  : 2
  ? true
  : false

type Includes<T extends readonly any[], U> = T extends [
  infer First,
  ...infer Other,
]
  ? Equal<First, U> extends true
    ? true
    : Includes<Other, U>
  : false

03057-easy-push

type Push<T extends any[], U> = [...T, U]

03060-easy-unshift

type Unshift<T extends any[], U> = [U, ...T]

03312-easy-parameters

type MyParameters<T> = T extends (...args: infer K) => any ? K : []