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?
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?
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
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