Pluralisierung mit Typen
Modellieren Sie Pluralformen auf typsichere Weise.
Pluralisierung mit Typen ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Typsichere Pluralisierung
Sprachen benötigen Pluralformen: "1 item" im Gegensatz zu "2 items". Typsichere i18n modelliert Plural-Kategorien (wie one / other) und verlangt ein count-Argument, sodass Sie es nie vergessen.
Pluralkategorien
Die Pluralregeln von Intl definieren Kategorien wie zero, one, two, few, many, other. Im Englischen werden nur one und other verwendet; andere Locales nutzen mehr.
type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";Struktur einer Pluralnachricht
Stellen Sie eine Nachricht mit Pluralformen als ein nach Kategorien indiziertes Objekt dar. other ist der erforderliche Fallback.
type PluralMessage = {
other: string;
} & Partial<Record<Exclude<PluralCategory, "other">, string>>;
const items: PluralMessage = {
one: "{count} item",
other: "{count} items",
};Pluralnachrichten von einfachen unterscheiden
Ein Katalog mischt einfache Strings und Pluralobjekte. Die Anforderungen an Argumente unterscheiden sich, daher erkennen wir die Struktur auf Typebene.
type IsPlural<M> = M extends { other: string } ? true : false;count voraussetzen
Wenn eine Nachricht Pluralformen hat, müssen die translate-Argumente ein numerisches count enthalten. Den Argumenttyp berechnen wir bedingt.
type PluralArgs<M> = IsPlural<M> extends true
? { count: number }
: {};
type A = PluralArgs<typeof items>; // { count: number }Eine typisierte t-Funktion für Pluralformen
Kombinieren Sie die Katalogsuche mit den bedingten Argumenten, sodass Pluralnachrichten count verlangen und einfache Nachrichten nicht.
declare const cat: {
items: { one: string; other: string };
hello: string;
};
declare function t<K extends keyof typeof cat>(
key: K,
args: PluralArgs<(typeof cat)[K]>
): string;
t("items", { count: 3 }); // ok
t("items", {}); // Error: count required
t("hello", {}); // okDie Form zur Laufzeit auswählen
Zur Laufzeit bestimmt Intl.PluralRules anhand der Anzahl die Kategorie, und Sie lesen den passenden String aus (mit einem Fallback auf other).
function plural(msg: { other: string; [k: string]: string }, count: number, locale: string) {
const cat = new Intl.PluralRules(locale).select(count);
return (msg[cat] ?? msg.other);
}Mit Interpolation kombinieren
Pluralstrings enthalten meist auch {count}. Der Argumenttyp kann die Anforderungen für Pluralformen mit den aus der ausgewählten Form extrahierten Interpolationsvariablen verbinden.
type FullArgs<M> = PluralArgs<M> & ExtractVars<M>;
// count plus any {placeholders} in the messageLocales mit mehr Formen
Einige Locales (z. B. Polnisch und Russisch) verwenden few und many. Da PluralCategory diese bereits enthält, kann ein Katalog diese Schlüssel bereitstellen, und dieselbe Logik verarbeitet sie.
const ruItems = {
one: "{count} товар",
few: "{count} товара",
many: "{count} товаров",
other: "{count} товара",
};Den other-Fallback erzwingen
Da other in PluralMessage verpflichtend ist, garantiert das Typsystem, dass ein Fallback vorhanden ist. So wird verhindert, dass zur Laufzeit keine Pluralform passt.
Warum das wichtig ist
Pluralfehler ("1 items") und vergessene Zählwerte sind in untypisierter i18n häufig. Wenn Sie Kategorien als Typen modellieren und count verlangen, wird korrekte Pluralisierung zum Standard und ein fehlendes count zu einem Compile-Fehler.
Kurzer Test
Prüfen Sie Ihr Verständnis der typsicheren Pluralisierung.
Zusammenfassung
Sie haben Pluralformen als nach Pluralkategorien indizierte Objekte mit einem verpflichtenden other-Fallback modelliert, Pluralnachrichten auf Typebene erkannt und mithilfe bedingter Typen ein numerisches count-Argument verlangt. Intl.PluralRules wählt die Form zur Laufzeit aus, und dieselbe Logik lässt sich auf Locales mit mehr Formen erweitern.
Lerne TypeScript mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 101
- Lektionen
- 352
Häufig gestellte Fragen
Ist die Lektion „Pluralisierung mit Typen“ kostenlos?
Ja — der vollständige Text von „Pluralisierung mit Typen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Pluralisierung mit Typen“?
Modellieren Sie Pluralformen auf typsichere Weise. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um TypeScript Academy zu starten?
Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Pluralisierung mit Typen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?
Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Übersetzungsschlüssel typisieren
- Typsicherheit bei Interpolation
- Pluralisierung mit Typen
- Locale-bewusste Typinferenz