2016-08-03 15 views
0

Ich brauche Zugriff auf die $promise Eigenschaft des Objekts mit einer Standardaktion zurückgegeben auf $resource (z. B. entfernen, Abfrage ...). Aber es scheint, ist es nicht möglich in aktuellen Typoskript Definitionen für $resource ist:

Beispiel:

ich einen Studenten Ressource:

interface IStudentDataModel { 
    name: string 
    age: number 
} 

interface IStudentResource extends IResourceClass<IStudentDataModel> { 
    deactivate(params: Object): IResource<IStudentDataModel> 
} 


export default function ($resource: IResourceService, CONFIG: IConfig): IStudentResource { 
    "ngInject" 

    let deactivateAction: IActionDescriptor = { 
     url: `${CONFIG.api_host}/students/:studentId/deactivate`, 
     method: 'PUT' 
    } 

    return <IStudentResource>$resource(
     `${CONFIG.api_host}/students/:studentId`,   
    } 
     studentId: '@studentId'  
    }, 
    { 
     deactivate: deactivateAction, 
    }); 

} 

Dann diese Ressource Ich verwende in einem anderen Dienst:

PROBLEM: Ich kann nicht auf die this.StudentResource.remove({ studentId: studentId}).$promise zugreifen, da Standardaktionen IStudentDataModel als Rückkehr trype inste haben Anzeige von IResource<IStudentDataModel> (aber es liefert Ressource mit $ promise-Eigenschaft, nicht nur Datenmodell).

Ich habe versucht, die Methode remove in IStudentResource außer Kraft zu setzen:

interface IStudentResource extends IResourceClass<IStudentDataModel> { 
    deactivate(params: Object): IResource<IStudentDataModel> 
    remove(params: Object): IResource<IStudentDataModel> 
} 

Aber Compiler sagt:

Interface 'IStudentResource' erstreckt sich falsch Schnittstelle 'IResourceClass'. Typen der Eigenschaft 'Entfernen' sind inkompatibel. Typ '(data: Object) => IResource' kann nicht dem Typ 'IResourceMethod' zugewiesen werden.

Antwort

0

Es ist ein bisschen grob, aber Sie können eine Art Behauptung jede um complaning verwenden, um die Typprüfung Halt zu machen.

return (<any>this.StudentResource.deactivate({ studnetId: studentId})).$promise; 

Auch da die Typoskript Schnittstellen offen sind beendet auch die IResource Schnittstelle ändern können die $ Eigenschaft versprechen hinzuzufügen.

interface IResourceClass<T> { 
    $promise: IPromise<T> 
}