dedlfix: String in Array konvertieren

Beitrag lesen

Tach!

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. Aber auch dass man keine gleichnamigen Funktionen mit unterschiedlichen Signaturen haben kann, macht es manchmal nötig, dass die Parametervariable mehrere Typen hat.

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. Man kann dem Typchecker auch behilflich sein, dass der Ruhe gibt.

Ich hab mal ein kleines Online-Beispiel gebastelt, um das zu demonstrieren.

function something(foo) {
  return foo ? [] : '';
}

const myArray = something(true);
for (var item in myArray) {
  console.log(item);
}

Im Online-Editor wird das Vorkommen von myArray in der for-Schleife bemängelt und mit einer Fehlermeldung versehen.

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.

const myArray = [].concat(something(true));

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];

Im Original ist der Zwischenschritt value nicht nötig, weil der Wert bereits in einer Variable vorliegt.

dedlfix.