我想创建一个接受字符串数组的方法,或者允许将字符串作为rest参数提供。当我尝试这个时,我得到一个编译器警告“Overload Signature is not Compatible”。
由于rest参数导致字符串数组,这不应该没问题吗?
class Example {
test(...strArray: string[]);
test(strArray: string[]);
test(strArray: string[]) {
alert(strArray.length.toString());
}
}
答案 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']
来包装休息参数: