我正在尝试定义一个将函数类型作为通用参数并返回与输入函数类型相同的函数类型的类型,只是它的末尾还有一个参数:
type AugmentParam<F extends (...args: any[]) => any,ExtraParam> = F extends (
...args: infer Args
) => infer R
? (
...args: [
...Args,ExtraParam
]
) => R
: never
用法示例:
type F = (x: number) => boolean
type F2 = AugmentParam<F,string> // (x: number,arg2: string) => boolean
...Args
似乎不起作用,但是,如果我将其更改为类似的名称,它将起作用:
type AugmentParam<F extends (...args: any[]) => any,ExtraParam> = F extends (
...args: infer Args
) => infer R
? (
...args: [
Args[0],Args[1] /* Spread doesn't work here,so it doesn't work for arbitrary number of arguments :( */,ExtraParam
]
) => R
: never
但是它仅适用于特定数量的参数,我需要为每个n元函数定义一个这样的类型。