2015-12-12 19 views
6

遅延オブジェクトを返す関数で$ httpをラップするサービスがあります。

マイインタフェース:

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

マイクラス:、参考のため

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<{}>'. 

DefinitelyTypedからhere is the IPromise定義:

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; 
    } 
} 

コンパイルが次のエラーで失敗しています。 IQService.defer()コールはIDeferredオブジェクトを返し、deferred.promiseはIPromiseオブジェクトを返します。

インターフェイスで間違った定義を使用しているのか、同じ方法で遅延オブジェクトを返さないのか分かりません。どんな入力も大歓迎です!

+2

これをすべてスキップすることができます。 =; '行も –

答えて

3

インターフェイスでは、プロパティgetを定義し、サービス実装では、関数get()です。おそらくあなたが望むのは関数なので、インタフェースは次のようにする必要があります:

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

うわー、恥ずかしいです。それは間違いなく問題でした。クイックヘルプをありがとう! – charcoalhobo