无限递归类型安全的函数队列
通过递归条件类型和变长元组,构建一个类型安全的函数调用队列,保证每个函数的输出类型匹配下一个函数的输入类型。 · 难度:入门 · +10XP
无限递归类型安全的函数队列
函数组合(pipe)通常需要固定数量的函数参数。本教程利用递归条件类型和变长元组(rest parameters),实现一个高度类型安全的队列系统:可以传入任意数量的函数,编译器会自动检查每个函数的输出类型必须与下一个函数的输入类型完全匹配,且最终返回结果的类型被精确推导。
type PipeFn<T, U> = (arg: T) => U;
type Pipe<Fns extends any[], Input> =
Fns extends [infer F, ...infer R]
? F extends PipeFn<Input, infer Output>
? R extends []
? Output
: Pipe<R, Output>
: never
: Input;
function pipe<I, Fns extends any[]>(
input: I,
...fns: Fns
): Pipe<Fns, I> {
return fns.reduce((acc, fn) => fn(acc), input) as any;
}