繁体   English   中英

Typescript function 过载,带可选参数和 rest 参数

[英]Typescript function overload with optional param and rest params

我在 Typescript 中有一个 function ,过载如下:

function test(atts?: {[key: string]: string}, ...children: string[]): void;
function test(atts?: {[key: string]: string}): void;
function test(...children: string[]): void; //Overload 3
function test(): void;
function test(arg1?: {[key: string]: string} | string[], ...arg2: string[]) {
  console.log(arg1, arg2)
}

但是,我一直被告知重载 3 与其实现签名不兼容。 如何修复此错误?

我已经查看了其他答案,但仍在努力完成这项工作。 我认为这与 arg2 可能未定义有关,这使其与第三个重载不兼容。 但是 rest 参数不能未定义,所以我不确定如果是这种情况如何实现这个逻辑。

您希望实现中的arg1可能是string ,而不是string[] ,对吗? 第三个调用签名支持类似test("hey", "you", "there") ... 在这种情况下, arg1将是"hey"arg2将是["you", "there"]

但是你有arg1可能是string[] ,这是不可能的。 所以有错误。 将其更改为string ,它应该可以工作:

function test(atts?: {[key: string]: string}, ...children: string[]): void;
function test(atts?: {[key: string]: string}): void;
function test(...children: string[]): void; 
function test(): void;
function test(arg1?: {[key: string]: string} | string, ...arg2: string[]) {
// ------------------------------------------> ~~~~~~ <--- here
  console.log(arg1, arg2)
}

Playground 代码链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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