【Typescript】Nullableに対する様々な操作


Next.js(React)でTypescriptで書いていますが、DOM関連でNullableな操作が続きどう処理するのがいいか悩んだので色々やってみます。

Typescriptは制限と同時にできることも多いので思いのほか色々できました。

 

キーワード:Null合体演算子Null条件演算子Null許容型Type GuardNon-null assertion operatorDefinite Assignment AssertionsOptional chaining

 

テストのためjsdomを使ってElement操作をします。

10行目でエラー:オブジェクトは ‘null’ である可能性があります。ts(2531)

querySelector()は要素がない場合nullを返すためNullableなことが原因です。

 

問題をわかりやすくするため分けてみます。

p1Element | nullunion型です。

その場しのぎ

常にnullではなくtextContentがあるならいいわけです。

方法は様々ですがTypescriptにはNull合体演算子があるので使ってみます。

A ?? BAnull, undefined(void 0)ならBを返す。見た目の似ている三項演算子(A?B:C)や役割の似ているor演算子(A||B)と違ってfalsyかどうかでない点は注意。

Type Guard

union型の型を決定して使うためにType Guardというものがあります。

nullじゃない状況を作って使えばエラーは出ません。

分かりやすいしミスもしなくなるため素晴らしいと思いますが、javascriptによって自由奔放に育てられた人には煩わしくも感じます。

 

少し強引ですが以下のようにしないといけないコードがあるとします。

Nullableが連なる処理をType Guardで書くのは結構面倒です。

Non-null assertion operator 🔗

通常初期化されていないなどで危険性のあるコードはエラーが起きます。

Definite Assignment Assertions 🔗でもありますがエクスクラメーションマーク ! を付けることで意図的にやっていることだと宣言できます。

これを利用してこう書けます。

ただ当然ですがnullだった場合には実行時エラーが出ます。

Optional chaining 🔗

3.7で使えるようになった比較的新しい機能。いわゆるNull条件演算子

Null許容型として省略可能なプロパティの定義に使えるクエスチョンマーク ? ですが、Nullableな結果に対するチェーンメソッドにも使えます。

この時のspan1-3undefinedが追加されたunion型(string | null | undefined)。

今回のケースではこれが一番よさそうです。


コメントを残す

メールアドレスが公開されることはありません。