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