如果函数有重载,则标准的TypeScrip Parameters<T>
帮助器仅返回最新版本的参数的类型.有没有办法绕过这一限制?
type StringNumber = `${number}`;
function add(a: StringNumber, b: StringNumber): number
function add(a: number, b: number): number
function add<T extends (StringNumber | number)>(a: T, b: T): number
{
return Number(a) + Number(b);
}
type AddParameters = Parameters<typeof add> // => [a: number, b: number]
const addParams: AddParameters = ['1', '3']; // Error
upd个
有人建议放弃参数表,手动描述类型.但是如果重载的函数在一个单独的包中,就会导致代码重复.有没有办法修改
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
包括所有超载?
例如,我想为具有重载的函数编写包装.
import { originFn } from 'another-library';
function wrapperFn(...args: Parametrs<typeof originFn>) {
return originFn(...args);
}
但我不想手动描述所有的重载.