TypeScript の 'satisfies' 演算子

その式の結果の型を変更せずに、式の型が何らかの型と一致することを検証します

TypeScript 4.9 を満たす

バージョン 4.9 では、TypeScript に「satisfies」演算子と呼ばれる新しい演算子が導入されました。その目的は、型の結合が全体的な型を満たすことを可能にすることで、同種でない型セットをより柔軟にすることです。

Record<> の型エラーを修正

この新しい演算子を示す最良の例は、値の型が異なる「レコード」型を使用することです。

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();

ご覧のとおり、新しいコードにより、指定されたキーの有効な型を正しく推測できます。これは、TypeScript 4.9 より前では不可能でした。コンパイラは、値が文字列型または数値型である可能性があると不平を言いますが、コンパイラは特定の型を正しく推測します。

プロパティ名の制約

new 演算子を使用して、セットが特定のキーのみを含み、他のキーを受け入れないことをコンパイラに指示することもできます。

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

その他の例

詳細な説明を含む例の完全なリストについては、著者が多くのユースケースを説明している Github のこの機能の元の問題を強くお勧めします (リンクは補遺にもあります)。