Type-challenges题目

13 Hello World

Type-challenges题目_typescript

就是类型别名,​​Helloworld​​​就是​​string​​的别名。

类似于cpp里的​​typedef ​​​,语法是​​type [名称] = [数据类型]​

4 实现Pick

Type-challenges题目_typescript_02

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

Type-challenges题目_typescript_03

7 实现Readonly

Type-challenges题目_数组_04

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

使用​​readonly​​​关键字声明属性是只读属性。
使用​​​keyof T​​​取出泛型​​T​​​中的所有key,再用​​in​​遍历。


11 元组转换为对象

Type-challenges题目_typescript_05

type TupleToObject<T extends readonly any[]> = {
[k in T[number]]: k
}

泛型​​T​​​是数组,数组以​​number​​​为索引,所以​​T[number]​​对应数组中的每个值。

使用​​in​​​遍历​​T[number]​​​,也即遍历泛型数组​​T​​中的每个值。

14.第一个元素

Type-challenges题目_泛型_06

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

需要特判数组长度是否为0,这里用T[0]是否为T[number]的子集判断,T[number]默认返回值组成的数组。

18 获取元组长度

Type-challenges题目_typescript_07

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

注意只有any[] 数组类型才有length 这个index type

43 Exclude

Type-challenges题目_元组_08

extends关键字这里对T、U进行分布式遍历,所以T满足U的话就返回never否则就返回T

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