繁体   English   中英

如何为返回新 function 的 function 设置正确的返回类型,最后一个参数可选

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM