2015-07-18 23 views
9

In C# zu implementieren, kann ich dies tun:Typoskript Typ-Parameter mehr Schnittstellen

class Dictionary<TKey, TVal> where TKey : IComparable, IEnumerable { } 

Gibt es eine Möglichkeit in Typoskript 1.5 beta für einen Typparameter in einer generischen Klasse oder Funktion zu implementieren mehr Schnittstellen, ohne eine völlig neue Schnittstelle für den Zweck zu schaffen?

Der offensichtliche Weg funktioniert offensichtlich nicht wegen der Vieldeutigkeit von Kommas.

class Dictionary<TKey extends IComparable, IEnumerable, TValue> { } 

By the way, komischerweise, extends Schnittstelle Gewerkschaften in Generika völlig in Ordnung umgehen kann:

class Dictionary<TKey extends IComparable|IEnumerable, TValue> { } 

Antwort

1

In TS1.5, der einzige Weg, Sie tun können, ist eine neue Schnittstelle angeben, die sich A und B, leider.

Eine andere Alternative ist Beten für die kommende TS1.6 wo intersection type unterstützt wird.

+0

Wow, ich Kreuzungstypen gedacht wird schließlich eine Sache sein, aber wussten nicht, dass sie auf dem Weg waren . Danke für die Antwort. – Matt

13

Intersection types sind jetzt hier seit TS 1.6 und Sie können es wie dies in Ihrem obigen Beispiel verwenden:

class Dictionary<TKey extends IComparable & IEnumerable, TValue> { } 
+0

Dies ist nicht genau dasselbe wie das Erweitern beider Schnittstellen. Es funktioniert jedoch in diesen einfachen Fällen, in denen die Schnittstellen keine Überlappung haben. – AlexG

+0

@AlexG Was meinst du? Warum wären überlappende Schnittstellen ein Problem? – Alex

+0

Mit {a: number} & {a: string} wäre der resultierende Typ automatisch der gleiche wie {a: number & string} Dies ist nicht das Gleiche wie das Erben von zwei verschiedenen Schnittstellen, bei denen eine in Konflikt stehende Eigenschaft ein Problem verursachen würde Error. – AlexG

Verwandte Themen