本文へスキップ
BecomeCoder

TypeScriptコース · 第7章 モダンTSと設定 · レッスン22

satisfies 演算子 ― 型チェックしつつ推論を保つ

ブラウザで完結

導入

オブジェクトリテラルが「決められた形を満たしているか」はチェックしたいけれど、変数自体の型は具体的な値のまま(プロパティ名まで絞り込まれたまま)にしておきたい、ということがあります。型注釈(: 型)だとチェックはできますが、型が広がってしまいます。それを解決するのが satisfies 演算子です。

説明

まず、型注釈を使った場合を見てみましょう。

type Colors = Record<string, string>;

const palette: Colors = {
  red: "#ff0000",
  green: "#00ff00",
};
console.log(palette.red);

これは動きますが、palette の型は Record<string, string> という「キーが string の何か」まで広がってしまい、redgreen という具体的なキーを持っている、という情報が失われます。

satisfies を使うと、Colors を満たしているかはチェックしつつpalette の型はリテラルのまま({ red: string; green: string })保たれます。

type Colors = Record<string, string>;

const palette = {
  red: "#ff0000",
  green: "#00ff00",
} satisfies Colors;

console.log(palette.red);   // red という具体的なプロパティのまま使える

「型のチェックはしたいが、値の詳しい形は保ちたい」というときに satisfies を選びます。TypeScript 4.9 以降で使える、比較的新しい記法です。

やってみよう

paletteblue: "#0000ff" を足して console.log(palette.blue) を試してみましょう。

演習

type Config = Record<string, number>; を使い、const settings = { timeout: 30, retry: 3 } satisfies Config; と書いてください。console.log(settings.retry) で結果を表示してください。

ヒント1を見る

type Config = Record<string, number>; const settings = { timeout: 30, retry: 3 } satisfies Config; と書きます。

ヒント2を見る

console.log(settings.retry); です。

実際に動かしてみよう

下のエディタにTypeScriptを書いて「実行」を押すと、その場でJavaScriptに変換してブラウザ内で実行し、出力が表示されます。本文の例をそのまま試したり、型注釈を書き換えたりしてみましょう(console.log の結果が下に出ます。初回だけコンパイラの読み込みに少し時間がかかります)。

TypeScript — ブラウザ内で実行

TypeScriptコンパイラ(同梱)でTS→JSに変換してから実行する学習用環境を読み込みます(初回のみコンパイラの読み込みに少し時間がかかります)。
スクロールして表示された時点でも自動で読み込まれます。