我想从元组中动态删除类型编号(元组从函数参数获取),但是该编号可以是其余类型:
function myFn(num1: number, text: string, ...nums: number[]): void {}
type Args = Parameters<typeof myFn>; // [number, string, ...number[]] <- Will be using similar result in future examples
我有一个通过递归过滤整个元组的类型:
type Filter<T extends any[], U> = T extends [] ? [] :
T extends [infer H, ...infer R] ?
H extends U ? Filter<R, U> : [H, ...Filter<R, U>] : T;
它非常适合简单类型:
type Args = [number, string, number, Symbol, number];
type Result = Filter<Args, number>; // [string, Symbol];
但是,当一个休息类型出现在一个元组中时,它的类型不能过滤“数字”或“数字[]”:
type Args = [number, string, ...number[]];
type Result1 = Filter<Args, number>; // [string, ...number[]]
type Result2 = Filter<Args, number[]>; // [number, string, ...number[]]
可能是什么问题,如何解决?
其余参数的类型是否不同?
为什么他通过“扩展”通过“ any”或“ number []”过滤器检查?
您非常接近:
type Args = [number, string, ...number[]];
type Filter<T extends any[], F> = T extends [] ? [] :
T extends [infer Head, ...infer Tail] ?
Head extends F ? Filter<Tail, F> : [Head, ...Filter<Tail, F>] : [];
type Result1 = Filter<Args, number>; // [string]
type Result2 = Filter<Args, number[]>; // [number, string]
type Result3 = Filter<Args, number | number[]>; // [string]
type Result4 = Filter<Args, number | number[] | string>; // []
我T
用空数组替换了您的最后一个返回类型[]
其余元素必须在元组中位于最后。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句