我正在try 实现允许用户向已定义函数的类型添加一些参数的类型. 例如:
function sourceFunction(a: number, b: string): number {
return a;
};
const extendedFunction: ExtendFunction<typeof sourceFunction, [boolean?]> = (a, b, flag) => {
//where a: number, b: string, flag: boolean | undefined
return a;
}
我已经实现了一些几乎可以完成这项工作的东西:
export type ExtendFunction<TFunction extends (...args: any) => any, TParameters extends any[]> = (
...args: [...Parameters<TFunction>, ...TParameters]
) => ReturnType<TFunction>;
但是,类型无法正确解析泛型函数,例如:
function sourceFunction<T>(a: T, b: string): T {
return a;
};
const extendedFunction: ExtendFunction<typeof sourceFunction, [boolean?]> = (a, b, flag) => {
//a is undefined instead of T
return a;
}
有没有办法让ExtendFunction
类型识别出传递的函数是泛型函数,并且在上面的例子中,返回值应该是T类型?