2016-12-14 109 views
3

使用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

回答

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中使用函數參數的唯一方法。