打字稿:从元组类型中删除条目 [英] Typescript: Remove entries from tuple type
本文介绍了打字稿:从元组类型中删除条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
不确定这是否可行,但我希望能够定义一种类型,将元组转换为:[number, string, undefined, number]
到 [number, string, number]
(即过滤掉undefined
).
not sure if this is possible, but I would like to be able to define a type that converts tuples like: [number, string, undefined, number]
to [number, string, number]
(ie filter out undefined
).
我想过这样的事情:
type FilterUndefined<T extends any[]> = {
[i in keyof T]: T[i] extends undefined ? /* nothing? */ : T[i];
}
可悲的是,我很确定没有办法实现这一点.
Sadly I am am pretty sure that there is no way to achieve this.
推荐答案
TS 4.1
元组上的过滤器操作现在正式 可能:
type FilterUndefined<T extends unknown[]> = T extends [] ? [] :
T extends [infer H, ...infer R] ?
H extends undefined ? FilterUndefined<R> : [H, ...FilterUndefined<R>] : T
让我们做一些测试来检查它是否按预期工作:
Let's do some tests to check, that it is working as intended:
type T1 = FilterUndefined<[number, string, undefined, number]>
// [number, string, number]
type T2 = FilterUndefined<[1, undefined, 2]> // [1, 2]
type T3 = FilterUndefined<[undefined, 2]> // [2]
type T4 = FilterUndefined<[2, undefined]> // [2]
type T5 = FilterUndefined<[undefined, undefined, 2]> // [2]
type T6 = FilterUndefined<[undefined]> // []
type T7 = FilterUndefined<[]> // []
更多信息
- 递归条件类型 #40002 (TS 4.1)
- 可变元组类型 #39094 (TS 4.0)
- Recursive conditional types #40002 (TS 4.1)
- Variadic tuple types #39094 (TS 4.0)
More infos
这篇关于打字稿:从元组类型中删除条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文