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 : []