[type-chanlleges] 追加参数

题目

由 @antfu 翻译

实现一个范型 AppendArgument<Fn, A>,对于给定的函数类型 Fn,以及一个任意类型 A,返回一个新的函数 GG 拥有 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即可。

ref:

type-chanlleges

追加参数