TypeScript重载签名与Rest和Array重载不兼容

时间:2013-11-04 00:12:08

标签: typescript

我想创建一个接受字符串数组的方法,或者允许将字符串作为rest参数提供。当我尝试这个时,我得到一个编译器警告“Overload Signature is not Compatible”。

由于rest参数导致字符串数组,这不应该没问题吗?

class Example {
    test(...strArray: string[]);
    test(strArray: string[]);
    test(strArray: string[]) {
        alert(strArray.length.toString());
    }
}

2 个答案:

答案 0 :(得分:2)

Rest参数被打包到函数体的数组中,而不是在调用站点。 (...strArray: string[])重载只导致第一个参数是数组,当它是实现签名时,因为rest args的codegen是将arguments打包到数组中的原因。其他呼叫签名的存在不会影响实现签名的codegen。

在您的示例中,如果有人调用了test('hi')strArray将是'hi',而不是['hi']

答案 1 :(得分:1)

可能是,但编译器采用不兼容的[string1,string2]string1,string2的字面含义。所以唯一的选择

class Example {
    test(...strArray: string[]);
    test(strArray: string[]);
    test(strArray: any){
        alert(strArray.length.toString());
    }
}

你总是可以使用['a','b']来包装休息参数: