*类似于Typescript中的行为

时间:2016-04-22 09:49:47

标签: angularjs typescript

我有一个函数callRest。

public callRest(payload: any, url: string){
    this.$httpservice.post(url, payload);
}

我希望能够在有效负载中传递多个参数。例如,有效载荷可能有两个变量:data&标题或只是一个:数据。在这两种情况下,我都希望发送请求以发送在有效负载内发送的所有参数。像

这样的东西
this.$httpservice.post(url, data, header); & 
this.$httpservice.post(url, data);//depending upon the structure of payload. 
//payload can be anything we want to define it as.

我可以在Python中用* payload这样做。如何在Typescript中实现此行为?我的问题有两个方面,我如何传递变量参数,然后如何将这些变量参数传递给post内部callRest调用。

PS:有效载荷可能有很多这样的变量。我宁愿不把它限制在数据和报头中。

2 个答案:

答案 0 :(得分:2)

使用destructuring在通过调用时声明参数和spread运算符:

function callRest(url: string, ...payload: any[]) {
    this.$httpservice.post(url, ...payload);
}

请注意,您需要将有效负载设置为最后一个参数而不是最初的参数。

答案 1 :(得分:0)

您需要将有效负载作为可选参数,该参数的类型应为[]。

e.g。

function callRest(url: string, ...payload: any[]) {
    if ( payload.length == 1) {
        this.$httpservice.post(url, payload[0]);
    } else if (payload.length == 2) {
        this.$httpservice.post(url, payload[0], payload[1]);
    } 
}

如果可以根据需要增加陈述。

第二种方法: -

function callRest(url: string, data: string, payload?: angular.IRequestShortcutConfig ) {
    this.$httpService.post(url, data, payload);
}

看看它是否有帮助。

有关详细信息,请参阅Variable arguments in typescript

此致

的Ajay