Kann ich den Parametertyp als einen von vielen Typen angeben, statt in TypeScript?

8

In einer Methodendeklaration in TypeScript kann der Parameter vom Typ array mit Strings, Booleans oder Zahlen sein. Muss ich es als beliebiges [] deklarieren oder gibt es eine Möglichkeit, den Eingabetyp auf diese drei Typen zu beschränken?

    
Amr 08.10.2012, 06:50
quelle

6 Antworten

24

Typescript 1.4 führte Union-Typen ein Die Antwort lautet nun ja, du kannst .

%Vor%

Wenn Sie einen anderen als den angegebenen Typ verwenden, wird ein Fehler bei der Kompilierung ausgelöst.

Wenn Sie ein Array mit mehreren spezifischen Typen wünschen, können Sie auch Union-Typen verwenden:

%Vor%

Beachten Sie, dass sich dies von dem unterscheidet, was OP angefordert hat. Diese beiden Beispiele haben unterschiedliche Bedeutungen.

    
Joao 28.08.2015, 05:21
quelle
6

Das scheint eine etwas alte Frage zu sein, aber trotzdem bin ich darauf gestoßen und habe diese andere Antwort verpasst, die ich mitbringe.

Aus TypeScript 1.4 scheint es möglich, mehrere mögliche Typen für einen Funktionsparameter wie folgt zu deklarieren:

%Vor%

Dies liegt an dem neuen TypeScript-Konzept von "union-types".

Sie können mehr hier sehen.

    
Blasfemizer 14.05.2015 09:56
quelle
1

Sie können dazu Funktionsüberladungen verwenden:

%Vor%     
Ryan Cavanaugh 08.10.2012 07:07
quelle
1

Nein. TypeScript unterstützt nur eine einzelne optionale TypeAnnotation in einem Parameter, z. x: string , number oder any, so dass Sie keine erlaubten Typen angeben können.

TypeScript unterstützt jedoch Funktionsüberladungen (Dokumentation p51):

  

Funktionsüberladungen ermöglichen eine genauere Spezifikation der von einer Funktion unterstützten Aufrufmuster, als dies mit einer einzigen Signatur möglich ist. [...]

%Vor%

Otherwssie Sie können typeof type checks verwenden, aber dies wirkt sich auf den Typ ascpect des Type Script ein wenig aus.

%Vor%     
Zeta 08.10.2012 07:08
quelle
0

Da Strings, Booleans und Zahlen primitive Typen sind, glaube ich nicht, dass es einen einfachen Weg gibt. Wenn Sie eine Reihe verschiedener Objekttypen verwenden würden, könnten Sie vielleicht eine Superklasse erstellen und diese Superklasse dann in der Oberfläche Ihrer Methode angeben. Auf der anderen Seite könnten Sie auch das Überladen von Methoden verwenden, um verschiedene Implementierungen für Arrays aus Strings, booleschen Werten und Ganzzahlen anzugeben.

    
Valentin 08.10.2012 07:08
quelle
0

Eine andere Möglichkeit, dies zu beheben, besteht darin, die allgemeinen Methoden und Eigenschaften zwischen den Eingabetypen zu finden und einen Inline-Typ in der Methodendeklaration zu deklarieren, die diese gebräuchlichen Methoden und Eigenschaften enthält. So:

%Vor%     
Amr 08.10.2012 07:21
quelle

Tags und Links