我试图定义一个类型,它将函数类型作为泛型参数,返回一个函数类型,该函数类型与输入的函数类型相同,只是在末尾多了一个参数:
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元函数定义一个这样的类型。
(text: string, html: string|undefined, editorState: EditorState) => DraftHandleValue
我定义了一个类似于这样的类型:AugmentParam<EditorProps['handleKeyCommand'], PluginFunctions>
,但它似乎没有按预期工作。 - Alireza Mirian