Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typescript and spread operator?

Tags:

typescript

function foo(x:number, y:number, z:number) {     console.log(x,y,z); } var args:number[] = [0, 1, 2];  foo(...args); 

Why am i getting getting this error in Typescript Playground???

Supplied parameters donot match any signature of call target.

like image 223
Amala James Avatar asked Dec 09 '15 13:12

Amala James


Video Answer


1 Answers

So there is a little clause you may have missed:

Type checking requires spread elements to match up with a rest parameter.

Without Rest Parameter

But you can use a type assertion to go dynamic... and it will convert back to ES5 / ES3 for you:

function foo(x:number, y:number, z:number) {   console.log(x,y,z); } var args:number[] = [0, 1, 2];  (<any>foo)(...args); 

This results in the same apply function call that you'd expect:

function foo(x, y, z) {     console.log(x, y, z); } var args = [0, 1, 2]; foo.apply(void 0, args); 

With Rest Parameter

The alternative is that it all works just as you expect if the function accepts a rest parameter.

function foo(...x: number[]) {   console.log(JSON.stringify(x)); } var args:number[] = [0, 1, 2];  foo(...args); 
like image 79
Fenton Avatar answered Sep 29 '22 17:09

Fenton