Nullish Coalescing

Null合体演算子は左辺が nullまたはundefinedのときに 右辺の式を返す||演算子の代わりです。 Null合体演算子とは対照的に、||演算子は空文字列や数字の0がfalseと判断される falsyチェックを用います。 この機能の良い例は、 キーが渡されなかったときに部分オブジェクトがデフォルト値を持つように処理する操作です。

interface AppConfiguration {
  // デフォルト: "(no name)"; 空文字列は有効
  name: string;

  // デフォルト: -1; 0は有効
  items: number;

  // デフォルト: true
  active: boolean;
}

function updateApp(config: Partial) {
  // Null合体演算子を使ったとき
  config.name = config.name ?? "(no name)";
  config.items = config.items ?? -1;
  config.active = config.active ?? true;

  // Null合体演算子を使わない現在の解決法
  config.name = typeof config.name === "string" ? config.name : "(no name)";
  config.items = typeof config.items === "number" ? config.items : -1;
  config.active = typeof config.active === "boolean" ? config.active : true;

  // ||演算子を用いると有効でないデータになる可能性がある
  config.name = config.name || "(no name)"; // "" の入力が許容できない
  config.items = config.items || -1; // 0の入力が許容できない
  config.active = config.active || true; // とても悪いことに、常にtrueになる
}

// 3.7のリリース記事にて、Null合体演算子についてより詳細に知ることができます: https://devblogs.microsoft.com/typescript/announcing-typescript-3-7/