如何在重载函数上使用参数类型?

Wef*_*ffe 7 typescript

在 TypeScript 中,有一个内置的参数类型,它返回给定函数的参数。它返回元组中的参数。

这是一个例子:

declare function foo(a: string, b: number): void;

type fooParams = Parameters<typeof foo>;
type aType = fooParams[0]; // string
type bType = fooParams[1]; // number
Run Code Online (Sandbox Code Playgroud)

但是,如果我们声明一个重载函数,那么我不知道如何获取重载函数的特定参数。这是一个例子:

declare function foo(a: string, b: number): void;
declare function foo(a: boolean, b: string, c: string): void;

type fooParams = Parameters<typeof foo>;

type aType = fooParams[0]; // boolean
type bType = fooParams[1]; // string
Run Code Online (Sandbox Code Playgroud)

看起来函数最后的任何重载声明都将在参数类型中使用。为了证明这一点,我们可以重新排序函数声明:

declare function foo(a: boolean, b: string, c: string): void;
declare function foo(a: string, b: number): void;

type fooParams = Parameters<typeof foo>;

type aType = fooParams[0]; // string
type bType = fooParams[1]; // number
Run Code Online (Sandbox Code Playgroud)

所以问题是,我如何提取我想要的特定重载函数的参数(例如,arity 为 2 的foo函数)?

我问这个问题是因为我在使用第三方库时倾向于使用参数类型。因此,如果函数重载,那么在尝试为正确的重载函数使用正确的参数类型时可能会导致一些问题。重载函数的一个示例是带有.on()函数的 jQuery 库。