1

我想创建一个接受字符串数组或允许将字符串作为休息参数提供的方法。当我尝试这个时,我收到一个编译器警告“重载签名不兼容”。

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

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

2 回答 2

2

其余参数在函数体而不是调用站点被打包到一个数组中。(...strArray: string[])重载只会导致第一个参数是实现签名时的数组,因为rest args 的代码生成是arguments为您打包成数组的东西。其他调用签名的存在不会影响实现签名的代码生成。

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

于 2013-11-04T06:14:11.087 回答
1

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

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

您总是可以只使用['a','b']包装其余参数的情况:

于 2013-11-04T02:04:41.060 回答