nullと型

nullと型

無いかもしれない値を型にする

プロフィールのニックネームのように、入っているかもしれないし空かもしれない項目があります。そういう値は string だけでは表せません。縦棒でつないで「文字列または null」と書きます。

const nickname: string | null = null;

この書き方をユニオン型と呼びます。くわしくは第5章で扱いますが、null と組み合わせる形はとてもよく出るので、ここで先に覚えます。

strictNullChecks が無いと何も守れない

このコースの設定では strictNullChecks という検査が有効になっています。これが有効だと、nullstring の仲間ではなくなります。

const nickname: string = null; // エラー Type 'null' is not assignable to type 'string'.

つまり string と書いた場所には、必ず文字列が入っていると信じてよくなります。この設定が無いと、あらゆる文字列が「実は null かもしれない」ものになり、型を付けた意味がほとんど無くなります。

null かもしれない値は、そのままでは使えない

string | null の値に文字列のメソッドを呼ぶと、その場で止められます。

function label(nickname: string | null): string { return nickname.trim(); // エラー 'nickname' is possibly 'null'. }

これは意地悪ではなく、実行時に Cannot read properties of null で落ちる場所を先に教えてくれているだけです。JavaScript で一番よく見るエラーが、書いている最中に出るようになったということです。

確かめれば使える

null かどうかを先に確かめると、その後ろでは文字列として扱えます。

function label(nickname: string | null): string { if (nickname === null) { return "(未設定)"; } return nickname.trim(); }

if を抜けた先には null が来ないと TypeScript も分かるので、trim が使えます。無い場合をどう扱うかを必ず書かせる、というのがこの型の狙いです。

手を動かす

演習では、名前とニックネームから表示名を作る関数を直します。ニックネームは string | null で、しかも空文字が入っていることもあります。両方の場合を落とさずに扱ってください。

要件

  1. ニックネームが null でも空文字でもないときは、ニックネームに さん を付けて返す
  2. ニックネームが null または空文字のときは、名前に さん を付けて返す
  3. nickname の型注釈 string | null は変えない

入出力例

displayName("ゆめさく", "ゆめ")"ゆめさん" displayName("ゆめさく", null)"ゆめさくさん" displayName("たなか", "")"たなかさん" displayName("さとうけんいち", "けんちゃん")"けんちゃんさん"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.ts
main.ts
学習モード

メモ

nullと型

⌘S で保存