【type-challenges】第一个元素
第一个元素
获取元素的第一个元素,当作类型,T[0] 即可拿到,关键是需要判空
参考 14 - First of Array --->三种答案
方法一
直接特判空元祖
type First<T extends any[]> = T extends [] ? never : T[0]
方法二
拿 length 判断
type First<T extends any[]> = T['length'] extends 0 ? never : T[0]
方法一和方法二其实类似,相当于都是特判空数组,一个直接和 [] 特判,一个是利用 T['length'] 来特判
感觉 ts 中的三目运算符,只能用 extends 关键字实现,另外 ts 没有 === 的概念,所以需要用到相等的场景,其实也可以用 extends 关键字
方法三
使用 infer
type First<T extends any[]> = T extends [infer A, ...infer rest] ? A : never
以下介绍 infer
T extends U ? X: Y
如果 U 是一个可以被分解成几个部分的类型(比如元祖),这时候可以通过 infer 来获取 U 中某个部分的类型(推导泛型参数)
infer 语法的限制如下:
infer只能在条件类型的 extends 子句中使用infer得到的类型只能在true语句中使用
浙公网安备 33010602011771号