将VS17RC与TS 2.1一起使用
function foo(x:number, y:number, z:number) { console.log(x + y + z)}
var args = [0, 1, 2];
foo(...args);
给出编译时错误“提供的参数与调用目标的任何签名都不匹配。”
这是已编译的js:
function foo(x, y, z) { console.log(x + y + z); }
var args = [0, 1, 2];
foo.apply(void 0, args);
实际上确实有效。
我在这里做错了吗?
示例来自此处:Typescript Deep Dive
答案 0 :(得分:3)
完全相同的例子有一个未解决的问题:
Compiler incorrectly reports parameter/call target signature mismatch when using the spread operator
此问题标记为bug
,但它是从2015年8月3日开始的,并且没有固定的里程碑。
答案 1 :(得分:1)
这是我的解决方法:
/**
* Function definition
*/
class SockService {
connect(...args:Array<string>) {
if (args.length > 1) {
[this.host, this.path] = args;
}
}
}
/**
* Function usage
*/
var endpoint = {
'local_test': [] as Array<string>,
'local': ['0.0.0.0:8080', '/foo/websocket'],
'production': ['192.0.2.1:8080', '/foo/websocket']
};
this.sock.connect(...endpoint.local_test);
我不喜欢使用像这样的休息参数,因为它使功能定义更具描述性。但这是我在TypeScript中使用函数参数进行传播的唯一方法。