我无法定义接受可变数量参数的函数成员的接口.以下面的对象文字为例:
var obj = {
func: () => {
for(var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
};
Run Code Online (Sandbox Code Playgroud)
我希望能够定义一个界面,例如:
interface IExample {
func: ( ??? ) => void;
}
Run Code Online (Sandbox Code Playgroud)
这样下面的代码可以编译而不会出错:
var test = (o: IExample) {
o.func("a");
o.func("a", "b");
o.func("a", "b", "c");
...
}
Run Code Online (Sandbox Code Playgroud)
chu*_*ckj 176
TypeScript使用ECMAScript 6传播提议,
但添加了类型注释,所以这看起来像,
interface Example {
func(...args: any[]): void;
}
Run Code Online (Sandbox Code Playgroud)
只是为了添加到查克的答案中,您不需要定义这样的接口。您可以...直接在方法中执行:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以调用它:
headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()))
Run Code Online (Sandbox Code Playgroud)
或者
headers: this.getHeaders(new Header('X-Auth-Token', this.getToken()), new Header('Something', "Else"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69600 次 |
| 最近记录: |