所以有一个小条款你可能错过了:
类型检查要求扩展元素与剩余参数匹配。
无休息参数
但是你可以使用类型断言来动态化...它会为你转换回 ES5 / ES3:
function foo(x:number, y:number, z:number) {
console.log(x,y,z);
}
var args:number[] = [0, 1, 2];
(<any>foo)(...args);
这会导致相同的结果apply
您期望的函数调用:
function foo(x, y, z) {
console.log(x, y, z);
}
var args = [0, 1, 2];
foo.apply(void 0, args);
带剩余参数
另一种方法是,如果函数接受剩余参数,那么一切都会按照您的预期工作。
function foo(...x: number[]) {
console.log(JSON.stringify(x));
}
var args:number[] = [0, 1, 2];
foo(...args);