2017-02-15 5 views
0

Ich möchte eine wiederverwendbare Netzwerkdienstkomponente erstellen, die für CRUD-Anfragen von Item verantwortlich wäre.Typescript generische Constraint erweitert anderen generischen Typ

Let "s sagen meine CatService eine Liste von cats anfordern möchten, dann kann es eine restService Instanz haben, und es kann für die Liste verwenden, erstellen, aktualisieren, löschen ...:

private restService:RestListService<Cat[]> = RestListService(); 
... 
restService.list(urlToGetCats).then(cats => console.log(listdata)); 
... 
restService.update(urlToUpdateACat, updatedCat); 

I . diese generischen Komponenten implementiert, aber es nicht sicher genug die Klassendeklaration sieht folgendermaßen aus:

export class RestListService<T extends Array<Identifiable>> { 

    private dataSubject$: BehaviorSubject<T> = null; 

    list(url: string): Promise<T> { } 

    // PROBLEM: I cannot specify the `savingInstance` & the returned Promise type: 
    update(updateURL: string, savingInstance: Identifiable): Promise<Identifiable> { } 

} 

im Idealfall würde ich etwas tun, wie ein generisches V wie die Art der Elemente im Array einzuführen, um den ar zu machen ray (und die ganze Klasse) mehr typsicher:

export class RestListService<T extends Array<V extends Identifiable>> { 

    //Here the Promise is type safe: 
    update(updateURL: string, savingInstance: Identifiable): Promise<V> { } 

} 

Aber es zur Zeit zulässig ist nicht (wie ich sehe).

Kann ich irgendwie den Typ Sicherheit in dieser Situation lösen?

Danke für Ihre Hilfe!

Antwort

0

Meinst du das?

export class RestListService<V extends Identifiable, T extends Array<V>> { 

    //Here the Promise is type safe: 
    update(updateURL: string, savingInstance: Identifiable): Promise<V> { } 

} 
Verwandte Themen