TypeScript4.0でNull合体代入演算子(??=)が導入されました

はじめに

TypeScript 4.0 Betaが2020/07/07にリリースされました。

この記事はリリースノートの中で個人的に気になった機能、Null合体代入演算子について共有するためのものです。

おことわり

この記事はBeta版に関するものです。正式リリース時に内容が変更になる可能性があります。

TypeScript 4.0が2020/08/20に正式リリースされました。Null合体代入演算子も予定通り導入されました

Nullish Coalescing Assignment Operator

TypeScript4.0では、Null合体代入演算子(Nullish Coalescing Assignment Operator)が導入される予定です。

Announcing TypeScript 4.0 Beta

この演算子を議論しているIssueはこちらです。

issue #37255 : Nullish Coalescing and Logical Compound Assignments

ECMAScriptのproposalはstage3です。

proposal-logical-assignment

機能

この演算子は、その名の通りTypeScript3.7で導入されたのNull合体演算子??と代入を組み合わせた演算子です。

たとえば、以下の2行はまったく同じ意味になります。

obj.x ??= 42;
obj.x = obj.x ?? 42;
  • obj.xnullundefinedの場合のみ、右辺の値が代入されます。
  • obj.x0""falseなどのFalsyな値の場合は代入されません。

どんなときに使うのか

たとえば

  • 関数の引数にオブジェクトを使う
  • オブジェクトは複数の省略可能なプロパティを持つ
  • 省略した場合、デフォルト値を代入する

という場合にコードが簡潔になります。

function f(option?:
  {
    val1?: string,
    val2?: string
  }
): void {
  option ??= {};
  option.val1 ??= "default1";
  option.val2 ??= "default2";
}

参考記事

PHP: Null合体代入演算子(??=)の使い所を考えてみた