2013-06-15 9 views

Antwort

30

In Typoskript, die es Union-Typen unterstützt, ist möglich

interface Example<T extends MyClass | OtherClass> { 

} 
+2

Union-Typen sind eine großartige Möglichkeit, um dies zu erreichen, da Sie keine Schnittstelle für den einzigen Zweck der Einschränkung erstellen müssen . Sie existierten 2013 noch nicht - aber das würde ich definitiv empfehlen. – Fenton

+4

Diese Antwort ist falsch. Unionstypen haben nicht die gleiche Semantik wie zwei unterschiedliche Typen überhaupt. – AlexG

+2

@AlexG Sicher, das ist nicht das gleiche wie _Extension_ zwei Arten, sondern das gleiche wie _implementieren_ zwei Schnittstellen. – STO

23

Eine Arbeit um dies zu tun wäre, eine Super-Schnittstelle zu verwenden (die auch die Frage beantwortet "Warum würden Sie zulassen, dass eine Schnittstelle von einer Klasse erbt").

interface ISuperInterface extends MyClass, OtherClass { 

} 

export interface IExample<T extends ISuperInterface> { 
    getById(id: number): T; 
} 
+10

Dies ist die richtige Lösung ist. Eine Schnittstelle von zwei Klassen zu erweitern ist jedoch etwas beängstigend - wenn beide private Mitglieder deklarieren, ist die Schnittstelle unerfüllbar –

+1

Sie sind ein Gentleman und ein Gelehrter! Vielen Dank. – Fenton

1

Ref den Kommentar über eine Schnittstelle aus einer Klasse abgeleitet ... Was ist in einem Namen?

fand ich dies in Abschnitt 3.5 der Spezifikation 0.9.0:

Schnittstelle Erklärungen nur benannte Typen einführen, während Klasse Erklärungen Typen und Konstruktorfunktionen namens einführen, die Instanzen von Implementierungen dieser genannten Typen erstellen . Die benannten Typen, die durch Klassen- und Schnittstellendeklarationen eingeführt wurden, haben nur geringfügige Unterschiede (Klassen können keine optionalen Member deklarieren und Schnittstellen können keine privaten Member deklarieren) und sind in den meisten Kontexten austauschbar. Insbesondere führen Klassendeklarationen mit nur öffentlichen Membern benannte Typen ein, die genau wie die von Interface-Deklarationen erzeugten funktionieren.

+0

Optionale Klassenmitglieder sind jetzt implementiert: https://github.com/Microsoft/TypeScript/pull/8625 –

Verwandte Themen