2012-10-05 52 views
57

我無法用接受可變數量參數的函數成員定義接口。看看下面的文字對象,例如:具有可變參數計數的函數的TypeScript類型簽名

var obj = { 
    func:() => { 
     for(var i = 0; i < arguments.length; i++) { 
      console.log(arguments[i]); 
     } 
    } 
}; 

我希望能夠定義一個接口如:

interface IExample { 
    func: (???) => void; 
} 

所以下面的代碼可以在沒有錯誤編譯:

var test = (o: IExample) { 
    o.func("a"); 
    o.func("a", "b"); 
    o.func("a", "b", "c"); 
    ... 
} 

回答

98

打字稿使用的ECMAScript 6傳播的建議,

http://wiki.ecmascript.org/doku.php?id=harmony:spread

但增加了輸入註解,這會是什麼樣子,

interface IExample { 
    func(...args: any[]): void; 
} 
+0

完美 - 由於某種原因,我沒能找到關於這個在語言規範文檔中的任何事情,但它似乎工作得很好。謝謝。 – nxn

+3

@nxn頁50/51在規格:RestParameter –

+0

@PulsarBlow啊,我不熟悉他們被稱爲休息參數。感謝您讓我知道在規範中哪裏可以找到它們。 – nxn

1

只是爲了增加夾頭的答案,你不需要有這樣定義的接口。你可以做的...直接的方法:

class Header { constructor(public name: string, public value: string) {} } 

getHeaders(...additionalHeaders: Header[]): HttpHeaders { 
    let headers = new HttpHeaders(); 
    headers.append('Content-Type', 'application/json') 

    if (additionalHeaders && additionalHeaders.length) 
     for (var header of additionalHeaders) 
      headers.append(header.name, header.value); 

    return headers; 
} 

然後,你可以把它叫做:

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken())) 

或者

headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()), new Header('Something', "Else")) 
相關問題