使用 Typescript 展开运算符导致编译错误
Using Typescript spread operator results in compile error
将 VS17RC 与 TS 2.1 结合使用
function foo(x:number, y:number, z:number) { console.log(x + y + z)}
var args = [0, 1, 2];
foo(...args);
给出编译时错误"Supplied parameters do not match any signature of call target."
这是编译后的js:
function foo(x, y, z) { console.log(x + y + z); }
var args = [0, 1, 2];
foo.apply(void 0, args);
这确实有效。
我这里有什么地方做错了吗?
示例来自这里:Typescript Deep Dive
完全相同的示例存在未解决的问题:
Compiler incorrectly reports parameter/call target signature mismatch when using the spread operator
该问题被标记为 bug
,但它从 2015 年 8 月 3 日开始存在,并且没有设置里程碑。
这是我的解决方法:
/**
* 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 中使用函数参数的唯一方式。
将 VS17RC 与 TS 2.1 结合使用
function foo(x:number, y:number, z:number) { console.log(x + y + z)}
var args = [0, 1, 2];
foo(...args);
给出编译时错误"Supplied parameters do not match any signature of call target."
这是编译后的js:
function foo(x, y, z) { console.log(x + y + z); }
var args = [0, 1, 2];
foo.apply(void 0, args);
这确实有效。
我这里有什么地方做错了吗?
示例来自这里:Typescript Deep Dive
完全相同的示例存在未解决的问题:
Compiler incorrectly reports parameter/call target signature mismatch when using the spread operator
该问题被标记为 bug
,但它从 2015 年 8 月 3 日开始存在,并且没有设置里程碑。
这是我的解决方法:
/**
* 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 中使用函数参数的唯一方式。