【问题标题】:Typescript function overload with optional param and rest params带有可选参数和剩余参数的打字稿函数重载
【发布时间】:2021-01-21 20:55:30
【问题描述】:

我在 Typescript 中有一个函数,其重载如下:

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参数不能是undefined,所以我不确定如果是这种情况如何实现这个逻辑。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您希望实现中的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 link to code

    【讨论】:

    • 哦,明白了!我现在明白了。谢谢!
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2019-09-15
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多