Skip to content

So iterieren Sie einen String-Literaltyp in Typoskript

Lösung:

Anstatt eine (Vereinigung von) String-Literaltypen wie vom OP angefordert zu iterieren, können Sie stattdessen ein Array-Literal definieren und wenn markiert as const dann ist der Typ der Einträge eine Vereinigung von String-Literaltypen.

Seit Typescript 3.4 können Sie const-Assertionen für Literalausdrücke definieren, um Folgendes zu kennzeichnen: - keine Literaltypen in diesem Ausdruck sollten erweitert werden (zB kein Wechsel von "hello" zu string) - Array-Literale werden zu schreibgeschützten Tupeln

Zum Beispiel:

const names = ["Bill Gates", "Steve Jobs", "Linus Torvalds"] as const;
type Names = typeof names[number];

Es kann zur Laufzeit und mit geprüften Typen verwendet werden, zum Beispiel:

const companies = {
    "Bill Gates" : "Microsoft",
    "Steve Jobs" : "Apple",
    "Linus Torvalds" : "Linux",
} as const;

for(const n of names) {
    console.log(n, companies[n]);
}
const bg : Names="Bill Gates";
const ms = companies[bg];

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions

https://mariusschulz.com/blog/const-assertions-in-literal-expressions-in-typescript

https://microsoft.github.io/TypeScript-New-Handbook/chapters/types-from-extraction/#indexed-access-types

Da TypeScript nur ein Compiler ist, sind zur Laufzeit keine der Typisierungsinformationen vorhanden. Dies bedeutet, dass Sie einen Typ leider nicht durchlaufen können.

Je nachdem, was Sie versuchen, können Sie Enumerationen verwenden, um Namensindizes zu speichern, die Sie dann in einem Array abrufen können.

Seit Typescript 2.4 ist es möglich, String-typisierte Aufzählungen zu verwenden. Diese Aufzählungen können leicht iteriert werden:

https://blogs.msdn.microsoft.com/typescript/2017/06/27/announcing-typescript-2-4/

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.