gpt4 book ai didi

angularjs - 使用 TypeScript 返回 AngularJS $q promise

转载 作者:搜寻专家 更新时间:2023-10-30 20:37:56 25 4
gpt4 key购买 nike

我有一项服务将 $http 与返回延迟对象的函数包装在一起。

我的界面:

export interface MyServiceScope {
get: ng.IPromise<{}>;
}

我的类(class):

export class MyService implements MyServiceScope {

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

constructor(private $http: ng.IHttpService,
private $log: ng.ILogService,
private $q: ng.IQService) {
this.$http = $http;
this.$log = $log;
this.$q = $q;
}

get(): ng.IPromise<{}> {
var self = this;
var deferred = this.$q.defer();

this.$http.get('http://localhost:8000/tags').then(
function(response) {
deferred.resolve(response.data);
},
function(errors) {
self.$log.debug(errors);
deferred.reject(errors.data);
}
);

return deferred.promise;
}
}

编译失败,错误如下:

myservice.ts(10,18): error TS2420: Class 'MyService' incorrectly implements interface 'MyServiceScope'.
Types of property 'get' are incompatible.
Type '() => IPromise<{}>' is not assignable to type 'IPromise<{}>'.
Property 'then' is missing in type '() => IPromise<{}>'.

供引用,here is the IPromise来自 DefinitelyTyped 的定义。 IQService.defer() 调用返回一个 IDeferred 对象,然后 deferred.promise 返回 IPromise 对象。

我不确定我是否在我的界面中使用了错误的定义,或者没有以相同的方式返回延迟对象。任何输入将不胜感激!

最佳答案

在您的界面中,您定义了一个属性get,在服务实现中它是一个函数get()。你可能想要的是一个函数,所以接口(interface)应该是:

export interface MyServiceScope {
get(): ng.IPromise<{}>;
}

关于angularjs - 使用 TypeScript 返回 AngularJS $q promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34237586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com