カテゴリ: TypeScript 更新日: 2025/11/23

TypeScriptでnull・undefinedを型ガードするテクニックを徹底解説!初心者でも理解できる安全なコードの書き方

TypeScriptでnull・undefinedを型ガードするテクニック
TypeScriptでnull・undefinedを型ガードするテクニック

先生と生徒の会話形式で理解しよう

生徒

「TypeScriptで値がnullかundefinedかを判定して安全に使う方法ってありますか?」

先生

「もちろんありますよ。TypeScriptには型ガードという仕組みがあって、nullやundefinedを安全に判定できます。」

生徒

「型ガードってどういうものですか?難しそうです…。」

先生

「心配しなくて大丈夫です。まずはnullとundefinedの違いからゆっくり見ていきましょう。」

1. nullとundefinedとは?初心者にもわかるTypeScriptの基本

1. nullとundefinedとは?初心者にもわかるTypeScriptの基本
1. nullとundefinedとは?初心者にもわかるTypeScriptの基本

TypeScriptでは、値が存在しない状態を表すためにnullundefinedという特別な値を使います。どちらも「何も入っていない」という意味ですが、少しだけ違いがあります。

undefined:変数を宣言しただけで値がまだ入っていない状態を表します。

null:開発者が「ここには値が無い」と明示的に設定した状態を表します。

プログラムでは、この2つが混ざることでエラーが起きやすくなります。特に初心者の方がよく遭遇するのが「undefinedのプロパティを読み取ろうとしてエラーになる」ケースです。これを防ぐために型ガードが重要になります。

2. TypeScriptでnull・undefinedを安全に判定する基本の型ガード

2. TypeScriptでnull・undefinedを安全に判定する基本の型ガード
2. TypeScriptでnull・undefinedを安全に判定する基本の型ガード

TypeScriptでは、nullやundefinedが入る可能性がある変数をそのまま使うと、エラーになる危険があります。そこでよく使われるのがtypeof!=を使った型ガードです。

たとえば次のように書くと、変数nameがnullでもundefinedでもないことを保証できます。


function printName(name: string | null | undefined) {
    if (name != null) {
        console.log(`名前は${name}です`);
    }
}

ここでのname != nullは、JavaScriptの特徴でnullとundefinedの両方をまとめて判定できる便利な書き方です。

3. 型ガードを使ってnull・undefinedを完全に排除する

3. 型ガードを使ってnull・undefinedを完全に排除する
3. 型ガードを使ってnull・undefinedを完全に排除する

TypeScriptでは、単純に判定するだけでなく、その後のコードで型が絞り込まれる点が便利です。これを型ガードによる絞り込みと呼びます。

次のように書くと、if文の中ではnameがstringであるとTypeScriptが判断してくれます。


function greet(name: string | null) {
    if (name) {
        console.log(`こんにちは、${name}さん`);
    }
}

ここでのif (name)は、null・undefined・空文字などをまとめて判定する「真偽値チェック」です。初心者向けには分かりやすいですが、空文字も除外されてしまう点には注意が必要です。

4. 明確な意図を持ってチェックするための厳密な型ガード

4. 明確な意図を持ってチェックするための厳密な型ガード
4. 明確な意図を持ってチェックするための厳密な型ガード

「空文字や0は許容したいけれどnullとundefinedだけ排除したい」というケースでは、厳密に比較する必要があります。


function check(value: string | number | null | undefined) {
    if (value !== null && value !== undefined) {
        console.log("値が存在します:", value);
    }
}

!==(厳密な比較)を使うことで、意図した値だけを確実に判定できます。大規模開発ではこのような正確な判定がよく使われます。

5. カスタム型ガードでnullチェックを便利にする

5. カスタム型ガードでnullチェックを便利にする
5. カスタム型ガードでnullチェックを便利にする

繰り返しnullチェックを書くのが面倒な場合は、カスタム型ガードを作成することでコードをすっきり書けます。


function isNotNull<T>(value: T | null | undefined): value is T {
    return value !== null && value !== undefined;
}

function showMessage(msg: string | null | undefined) {
    if (isNotNull(msg)) {
        console.log(msg);
    }
}

このように型ガードを作ると、if文の中ではmsgがstringとして扱われるため、とても安全に使えるようになります。

6. optional chaining(?.)で安全にアクセスする方法

6. optional chaining(?.)で安全にアクセスする方法
6. optional chaining(?.)で安全にアクセスする方法

TypeScriptでは、プロパティを読み取る際にnullチェックを書かなくてもすむoptional chaining(オプショナルチェイニング)が使えます。


const user = {
    name: "太郎",
    address: null
};

console.log(user.address?.city);

?.を使うと、addressがnullでもエラーにならず、undefinedを返します。初心者にも扱いやすく、最近のTypeScriptでは非常に人気のある書き方です。

7. null合体演算子(??)でデフォルト値を入れる

7. null合体演算子(??)でデフォルト値を入れる
7. null合体演算子(??)でデフォルト値を入れる

nullまたはundefinedの場合にだけ、代わりの値を設定したい場面も多いです。そんなときはnull合体演算子(??)を使います。


let input: string | null = null;
let message = input ?? "デフォルトメッセージ";
console.log(message);

この書き方は、「値がnullかundefinedなら、この値を使ってね」という意味になります。JavaScript初心者にも直感的で扱いやすい構文です。

関連記事:
カテゴリの一覧へ
新着記事
TypeScriptのEnum(列挙型)の使い方を解説!初心者でもわかる定数のグループ化
TypeScriptとは?JavaScriptとの違いと導入メリットを徹底解説
TypeScriptとJavaScriptでの変数宣言の違い(型注釈あり/なし)
TypeScriptのインターフェース(interface)とは?基本構文と使い方
人気記事
No.1
Java&Spring記事人気No1
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.3
Java&Spring記事人気No3
TypeScriptの始め方:開発環境の構築手順【初心者向け】
No.4
Java&Spring記事人気No4
JavaScriptのMathオブジェクトの基本メソッド一覧と使い方