TypeScript中如何解引用数组类型获取单元素类型并实现ArrayDeref
实现方案
你可以通过TypeScript的条件类型+infer关键字实现ArrayDeref泛型,代码如下:
type ArrayDeref<T> = T extends (infer U)[] ? U : never;
逻辑说明
- 该泛型通过条件类型判断入参
T是否为数组类型 - 如果是数组类型,就通过
infer关键字推断数组元素的类型为U,直接返回U - 如果入参不是数组类型,返回
never类型做容错
使用示例
type A = string[] type ASingular = ArrayDeref<A> // ASingular 的类型等价于 string
拓展兼容
如果需要支持readonly只读数组,可以调整泛型实现:
type ArrayDeref<T> = T extends readonly (infer U)[] ? U : never;
简化写法
你也可以利用数组的索引签名实现相同效果,该写法要求入参必须为数组类型:
type ArrayDeref<T extends any[]> = T[number]
内容的提问来源于stack exchange,提问作者user82395214
相关产品推荐
相关产品推荐

