[type-chanlleges] 追加参数
题目
由 @antfu 翻译
实现一个范型 AppendArgument<Fn, A>
,对于给定的函数类型 Fn
,以及一个任意类型 A
,返回一个新的函数 G
。G
拥有 Fn
的所有参数并在末尾追加类型为 A
的参数。
type Fn = (a: number, b: string) => number
type Result = AppendArgument<Fn, boolean>
// 期望是 (a: number, b: string, x: boolean) => number
本挑战来自于 @maciejsikora 在 Dev.io 上的文章
在 Github 上查看:https://tsch.js.org/191/zh-CN
解:
type AppendArgument<Fn, A> = Fn extends (...args: infer N) => infer R ? (...args: [...N, A]) => R : Fn;
通过infer
提取到函数Fn
的参数N
, 及返回值R
, 在返回的函数参数中添加A
即可。