Wie konvertiere ich Typoskript-Typen von Zeichenfolgen in ein Array von Zeichenfolgen?

Lesezeit: 2 Minuten

Ich habe diesen Typ:

type myCustomType = "aaa" | "bbb" | "ccc";

Ich muss es in ein Array wie folgt konvertieren:

["aaa", "bbb", "ccc"]

Wie kann ich das in Schreibschrift machen?

  • Nicht möglich, Typen sind nicht im ausgegebenen Code. Aber Sie könnten es auch umgekehrt machen – definieren Sie das Array und erstellen Sie dann einen Typ daraus

    – Bestimmte Leistung

    22. Januar 2020 um 10:10 Uhr

  • @TJCrowder const arr = ["aaa", "bbb", "ccc"] as const; type arrTypes = typeof arr[number];

    – Bestimmte Leistung

    22. Januar 2020 um 10:14 Uhr

  • @CertainPerformance – Ah … ich habe das verpasst as const Teil. Ich denke, das wäre eine gute Antwort, ich schlage vor, sie zu posten.

    – TJ Crowder

    22. Januar 2020 um 10:15 Uhr


  • @CertainPerformance Okay, danke für die schnelle Antwort. Ich werde dann mit dieser Lösung gehen – das könnte auch mein Szenario lösen 🙂

    – Diemauerdk

    22. Januar 2020 um 10:16 Uhr

Benutzeravatar von CertainPerformance
Bestimmte Leistung

Typen existieren nicht im ausgegebenen Code – Sie können nicht von a ausgehen Typ zu einem Reihe.

Aber man könnte in manchen Situationen auch andersherum vorgehen. Wenn das Array nicht dynamisch ist (oder seine Werte zum Zeitpunkt der Initialisierung vollständig vom Typprüfer bestimmt werden können), können Sie das Array deklarieren as const (damit der Typ des Arrays ist ["aaa", "bbb", "ccc"] statt string[]) und erstellen Sie dann einen Typ daraus, indem Sie seine Werte von zuordnen arr[number]:

const arr = ["aaa", "bbb", "ccc"] as const;
type myCustomType = typeof arr[number];

Hier ist ein Beispiel auf dem Spielplatz.

  • was macht [number] hier meinen?

    – Batman

    7. Dezember 2020 um 4:08 Uhr

  • Es wertet die Vereinigung von arr[0], arr[1]usw; arr[someNumber] Wo someNumber ist eine Zahl. Es ist nur TypeScript-Syntax, nicht JS.

    – Bestimmte Leistung

    7. Dezember 2020 um 4:10 Uhr


  • Was bedeutet die as const Teil?

    – Adrien

    4. Mai 2021 um 14:53 Uhr

  • @adrisons Es hält TypeScript davon ab, den Typ automatisch zu erweitern string[]und behält es stattdessen als statisches Tupel von bei ["aaa", "bbb", "ccc"]

    – Bestimmte Leistung

    4. Mai 2021 um 15:49 Uhr

Zum Beispiel:

  const themeMode = ['light', 'dark'] as const;
  type MainTheme = typeof themeMode[number];
  const values = [...themeMode];

  // iterate on themeMode as const assertion
  values.map((theme) => console.log(theme));

Sie können es nicht mit String-Literal tun, aber Sie können es mit einer Aufzählung tun

enum MyEnum {
  "aaa",
  "bbb",
  "ccc",
}

Object.keys(MyEnum).forEach(key => {
  console.log(key);
})

Repro hier: https://stackblitz.com/edit/typescript-uqvach

  • Das liefert nicht den vom OP geforderten Gewerkschaftstyp. Sie verwenden eine Aufzählung grundlegend anders als einen Union-Typ.

    – TJ Crowder

    22. Januar 2020 um 10:16 Uhr

1441820cookie-checkWie konvertiere ich Typoskript-Typen von Zeichenfolgen in ein Array von Zeichenfolgen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy