我应该使用什么类型的Typescript返回值进行$ http调用,除了成功之外什么也不返回?

Ala*_*an2 16 angularjs typescript

我使用Typescript创建了一个服务:

class ConfigService implements IConfigService {

    public admin = {};
    public adminBackup = {};
    public user = {};
    public loaded = false;

    constructor(
        private $http: ng.IHttpService,
        private $q: ng.IQService
        ) {

    }

    static $inject = [
        '$http',
        '$q'
    ];

    put = ():ng.IHttpPromise<> => {
        var defer = this.$q.defer();
        if (angular.equals(this.admin, this.adminBackup)) {
            return defer.resolve();
        } else {
            this.$http({
                data: {
                    adminJSON: JSON.stringify(this.admin),
                    userJSON: JSON.stringify(this.user)
                },
                url: '/api/Config/Put',
                method: "PUT"
            })
                .success(function (data) {
                    this.adminBackup = angular.copy(this.admin);
                    this.userBackup = angular.copy(this.user)
                    return defer.resolve();
                });
        }
        return defer.promise;
    };

}
Run Code Online (Sandbox Code Playgroud)

我还创建了这个界面:

interface IConfigService {
     put(): ng.IHttpPromise<>;
}
Run Code Online (Sandbox Code Playgroud)

但是代码给我一个错误说:

Error   3   Cannot convert 'void' to 'ng.IHttpPromise<any>'.    

Error   4   Cannot convert 'ng.IPromise<{}>' to 'ng.IHttpPromise<any>':
    Type 'ng.IPromise<{}>' is missing property 'success' from type 'ng.IHttpPromise<any>'.  
Run Code Online (Sandbox Code Playgroud)

bas*_*rat 19

使用

ng.IPromise<void>
Run Code Online (Sandbox Code Playgroud)

如果您没有声明返回类型并且不使用该接口,也可以让它隐式地为您输入.

这里也应该没有退货声明:

return defer.resolve();
Run Code Online (Sandbox Code Playgroud)

只是:

defer.resolve();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.要使其工作,我必须做的一件事是将<void>更改为<any>.它正在传达一条信息,表示承诺已经返回{}.我做了什么还好吗? (3认同)
  • 我也用<any> (2认同)
  • @Alan,使用:var deferred = $ q.defer <void>(); 这将让你返回无效. (2认同)