使用Typescript扩展运算符会导致编译错误

时间:2016-12-14 16:07:03

标签: typescript typescript2.1

将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

2 个答案:

答案 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中使用函数参数进行传播的唯一方法。