Der 'erfüllt'-Operator in TypeScript

Überprüfen Sie, ob der Typ eines Ausdrucks mit einem Typ übereinstimmt, ohne den resultierenden Typ dieses Ausdrucks zu ändern

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).