1unitedpower: String in Array konvertieren

Beitrag lesen

Allerdings geht das doch sicher auch kürzer resp. eleganter, oder?

Eine Variable, die zur Laufzeit Werte verschiedener Typen annehmen kann, ist ein Indiz dafür, dass die Variable für mindestens zwei verschiedene Zwecke benutzt wird.

Ja, geht aber manchmal nicht anders. Wenn null/undefined ebenfalls ein gültiger Wert sein darf, sind das schon zwei Typen.

null und undefined sorgen ihrerseits für mehr Probleme als Lösungen, aber ja, manchmal muss man sich damit rumschlagen.

Aber auch dass man keine gleichnamigen Funktionen mit unterschiedlichen Signaturen haben kann, macht es manchmal nötig, dass die Parametervariable mehrere Typen hat.

Stimmt, das ist eine Schwäche von TypeScript, die die Sprache wahrscheinlich auch nicht überwinden wird, weil eines der Design-Ziele – JavaScript-Kompatibilität – damit in Konflikt steht. Die Alternative wäre, die Funktionen unterschiedlich zu bennnen. Wenn das auch keine Möglichkeit ist, dann hilft nur ein Laufzeit-Typecheck.

Ich würde das Problem bei der Wurzel packen und diese Fälle auseinander dividieren. Ein Typchecker kann dabei behilflich sein, indem er die problematischen Stellen moniert.

Geht halt nicht immer.

Richtig.

Man kann dem Typchecker auch behilflich sein, dass der Ruhe gibt.

Womit ja auch wieder ein potenzieller Laufzeitfehler behoben wurde.

Wenn man die beabsichtige Lösung einbaut und alles, was kein Array ist, in ein solches konvertiert, ist er auch wieder friedlich, ganz ohne any oder string|string[] als Typangabe.

Mein Beispiel macht auch keinen Gebrauch von ausdrücklichen Typangaben.

Auch wenn man es etwas ausdrücklicher macht und keine Nebenwirkung von concat() ausnutzt:

const value = something(true);
const myArray = Array.isArray(value) ? value : [value];

Finde ich so auch deutlich besser lesbar.