TypeScript 4.9 genügt
Mit Version 4.9 führt TypeScript einen neuen Operator namens „satisfies“-Operator ein. Sein Zweck besteht darin, inhomogene Typensätze flexibler zu machen, indem eine Vereinigung von Typen ermöglicht wird, um den Gesamttyp zu erfüllen.
Tippfehler mit Record<> beheben
Das beste Beispiel zur Demonstration dieses neuen Operators verwendet einen „Datensatz“-Typ, bei dem die Typen der Werte unterschiedlich sein können.
type Keys = "alpha" | "beta" | "gamma";
const variants = {
alpha: 0,
beta: 1,
gamma: "three"
} satisfies Record<Keys, string | number>;
// With the new 'satisfies'-operator,
// the types for each of the properties
// is correctly inferred.
const otherBeta = variants.beta + 10;
const gammeUppercase = variants.gamma.toUpperCase();
Wie Sie sehen können, ermöglicht der neue Code, den gültigen Typ für den angegebenen Schlüssel korrekt abzuleiten. Dies wäre vor TypeScript 4.9 nicht möglich. Der Compiler würde sich darüber beschweren, dass der Wert vom Typ Zeichenfolge oder Zahl sein könnte, während der Compiler jetzt korrekt auf den spezifischen Typ schlussfolgert.
Einschränkung des Eigenschaftsnamens
Wir können den new-Operator auch verwenden, um den Compiler anzuweisen, dass es in Ordnung ist, wenn ein Set nur einige gegebene Schlüssel enthält, aber keine anderen akzeptiert.
type Keys = "alpha" | "beta" | "gamma";
const variants = {
alpha: "value",
beta: 0,
// The compiler will show an error,
// as 'delta' is not part of the keys.
delta: new Date()
} satisfies Partial<Record<Keys, unknown>>;
Mehr Beispiele
Für eine vollständige Liste von Beispielen mit ausführlichen Beschreibungen empfehle ich dringend die Originalausgabe dieses Features auf Github, wo der Autor viele Anwendungsfälle beschreibt (Link auch im Anhang).