2015-12-12 11 views
6

Ich habe einen Dienst, der $ http mit meinen Funktionen umschließt, die ein verzögertes Objekt zurückgeben.

Meine Schnittstelle:

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

Meine Klasse:

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

Die Zusammenstellung mit dem folgenden Fehler fehlschlägt:

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

Als Referenz here is the IPromise Definition von DefinitelyTyped. Der IQService.defer()-Aufruf gibt ein IDeferred-Objekt zurück, und dann gibt deferred.promise IPromise-Objekt zurück.

Ich bin mir nicht sicher, ob ich die falschen Definitionen in meiner Schnittstelle verwende oder das verzögerte Objekt nicht auf die gleiche Weise zurückschicke. Jede Eingabe würde sehr geschätzt werden!

+2

Sie können alle diese "überspringen. =; 'Zeilen auch –

Antwort

3

In Ihrer Schnittstelle haben Sie eine Eigenschaft get definiert und in der Service-Implementierung ist es eine Funktion get(). Was Sie wahrscheinlich wollen, ist eine Funktion, so sollte die Schnittstelle sein:

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

Wow, das ist peinlich. Das war definitiv das Problem. Danke für die schnelle Hilfe! – charcoalhobo

Verwandte Themen