2016-03-26 3 views
4

Angenommen, ich habe ein JavaScript-Array, das am Anfang ein bestimmtes Muster von verschiedenen Elementtypen hat, aber dann ein (Muster von) sich wiederholenden Elementtyp (en) am Ende zu einer beliebigen Anzahl von Wiederholungen.TypeScript: Wie kann ich einen Typ für ein JavaScript-Array mit unterschiedlichen Elementtypen deklarieren, aber keine feste Länge?

Wie kann ich einen TypeScript-Typ deklarieren, der mit diesem JavaScript-Array kompatibel ist?

interface A { 
    foo: Foo, 
    bar: Bar, 
} 

interface B { 
    baz: Baz 
} 

interface Bat { 
    // getArr(): [A, B, B, B], // tuple type puts types at specific indexes 
           // but only supports a fixed number of elements 
    // getArr(): Array<A | B>, // array type notation allows arbitrary number 
           // of elements but doesn't require them to be 
           // in specific positions 
} 

Edit:

weiter Um zu klären, ich bin das Experimentieren mit der Verwendung von externen Typoskript Erklärungen mit Vanille-JavaScript-Code Probleme in bestehendem Code JavaScript zu identifizieren. Ich verstehe, dass die Darstellung unklug sein kann; Wäre mehr Weisheit bei der Erstellung des ursprünglichen JavaScript-Codes verwendet worden, hätte ich dieses Abenteuer nicht unternommen.

Antwort

2

Es ist nicht möglich, solche die in Maschinenschrift Typsystem zu erklären: Arrays müssen haben eine homogene Art

In diesem Fall ist die Anordnung (Array<c'>) aus einem homogenen c', wo c' = A | B.


Natürlich, wenn die Datenstruktur zerlegt werden konnte, dann einige zusätzliche/komplexe Codierung könnte „geeignet“ sein, zB.

[ A, Array<B> ] 

Ich bin von einer beliebigen Programmiersprache Typsystem nicht bewusst, dass eine solche Beschränkung erlaubt - für eine ungebundene Sequenz - basierend auf beliebigen Muster Regeln.

+2

Es ist auch nicht, was Arrays, Listen und dergleichen sind. Wenn es verschiedene Arten von Elementen gibt, sollten Sie wahrscheinlich ein Objekt verwenden und den verschiedenen Sammlungen Namen geben. – Pablo

+0

TypeScript hat definitiv eine Unterstützung für nicht-homogene Typen in Arrays: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#333-tuple-types – rakslice

+1

@rakslice Tupel müssen nicht homogen sein. Aber Tupel sind keine Arrays. – user2864740

Verwandte Themen