Type-challenges题目
13 Hello World
就是类型别名,Helloworld
就是string
的别名。
类似于cpp里的typedef
,语法是type [名称] = [数据类型]
4 实现Pick
type MyPick<T, K extends keyof T = keyof T> = {
[k in K]: T[k];
}
7 实现Readonly
type MyReadonly<T> = {
readonly [k in keyof T]:T[k]
}
使用readonly
关键字声明属性是只读属性。
使用keyof T
取出泛型T
中的所有key,再用in
遍历。
11 元组转换为对象
type TupleToObject<T extends readonly any[]> = {
[k in T[number]]: k
}
泛型T
是数组,数组以number
为索引,所以T[number]
对应数组中的每个值。
使用in
遍历T[number]
,也即遍历泛型数组T
中的每个值。
14.第一个元素
type First<T extends any[]> = T[0] extends T[number]?T[0]:never
需要特判数组长度是否为0,这里用T[0]是否为T[number]的子集判断,T[number]默认返回值组成的数组。
18 获取元组长度
type Length<T extends readonly any[]> = T['length']
注意只有any[] 数组类型才有length 这个index type
43 Exclude
extends关键字这里对T、U进行分布式遍历,所以T满足U的话就返回never否则就返回T
type MyExclude<T, U> = T extends U?never:T
标签:遍历,题目,type,never,number,challenges,数组,泛型,Type From: https://blog.51cto.com/u_15326986/5846774