[英]How to change the return type of a function based on an optional parameter being provided?
[英]How to set correct return type for function that returns new function with last parameter optional
我正在尝试制作一个 function ,它返回一个新的 function ,它的最后一个参数是可选的,我不知道如何实现正确的返回类型。
类似于(我知道这不起作用,因为LastOptional
不存在):
export function convert<T extends (...args: any[]) => void>(convertFunction: T): (...args: LastOptional<Parameters<T>>) => void {
...
}
像这样使用:
function test(first: string, second: number): void {
if (first === 'hello') {
console.log('bye');
} else if (second === 4) {
console.log(5);
}
}
const converted = convert(test);
converted('hello');
在这里, converted
应该有类型签名:
const converted: (first: string, second?: number | undefined) => void
谢谢。
我设法用以下类型完成了这项工作:
export type LastOptional<T extends any[]> =
T extends [infer T1] ? [T1?] :
T extends [infer T1, infer T2] ? [T1, T2?] :
T extends [infer T1, infer T2, infer T3] ? [T1, T2, T3?] :
T extends [infer T1, infer T2, infer T3, infer T4] ? [T1, T2, T3, T4?] :
T extends [infer T1, infer T2, infer T3, infer T4, infer T5] ? [T1, T2, T3, T4, T5?] :
T;
像这样使用:
export function convert<T extends (...args: any[]) => void>(convertFunction: T): (...args: LastOptional<Parameters<T>>) => void {
...
}
但是,这不会保留参数名称,欢迎提出有关如何保留这些名称的任何建议。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.