カテゴリ: TypeScript 更新日: 2025/12/14

TypeScriptでnull・undefinedを正しく扱う方法を初心者向けにやさしく解説!

TypeScriptでnull・undefinedを正しく扱う方法
TypeScriptでnull・undefinedを正しく扱う方法

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

生徒

「TypeScriptでnullとかundefinedってよく見かけるけど、何が違うんですか?」

先生

「とても大事なポイントですね。nullundefinedは、どちらも“何も値が入っていない”ことを表しますが、少し意味が違います。」

生徒

「じゃあ、どんな場面で使い分ければいいんですか?」

先生

「実際の例を見ながら、nullundefinedの違いや扱い方を学んでいきましょう!」

1. nullとundefinedとは?

1. nullとundefinedとは?
1. nullとundefinedとは?

nullundefinedは、どちらも“値がない”ことを意味しますが、役割が少し違います。

  • null:「値が存在しない」と、開発者が明示的に設定する状態。
  • undefined:「まだ値が設定されていない」ことを、JavaScriptやTypeScriptが自動で判断した状態。

たとえば、変数を定義したけれど、まだ何も代入していない場合、その変数の中身はundefinedになります。

2. 実際に試してみよう!

2. 実際に試してみよう!
2. 実際に試してみよう!

まずは、nullundefinedの基本的な違いを確認してみましょう。


let a;
console.log(a); // undefined

let b = null;
console.log(b); // null

undefined
null

aは値が代入されていないのでundefinedbは自分でnullを入れたのでnullになります。

3. nullやundefinedを安全に扱うには?

3. nullやundefinedを安全に扱うには?
3. nullやundefinedを安全に扱うには?

値がnullundefinedかもしれない変数をそのまま使うと、エラーになることがあります。

そのためには、事前にif文などでチェックする方法が大切です。


let name: string | null = null;

if (name !== null) {
    console.log("名前は " + name + " です");
} else {
    console.log("名前が設定されていません");
}

名前が設定されていません

このように、nullの可能性がある場合にはチェックを入れておくと、安全に使えます。

4. TypeScriptでの型指定に注意しよう

4. TypeScriptでの型指定に注意しよう
4. TypeScriptでの型指定に注意しよう

TypeScriptでは、nullundefinedを許すかどうかを型で指定できます。

以下のように、| null| undefinedを使って明示的に指定します。


let age: number | undefined;
age = 25; // OK
age = undefined; // OK
age = null; // エラー(undefinedしか許可していないため)

nullも許可したい場合は、number | null | undefinedと書く必要があります。

5. null合体演算子(??)を使おう

5. null合体演算子(??)を使おう
5. null合体演算子(??)を使おう

??(null合体演算子)を使うと、値がnullまたはundefinedのときに、代わりの値を使うことができます。


let userName: string | null = null;
let displayName = userName ?? "ゲスト";
console.log(displayName);

ゲスト

??は、「nullundefinedなら右側の値を使う」という便利な書き方です。

6. optional chaining(オプショナルチェーン)も便利!

6. optional chaining(オプショナルチェーン)も便利!
6. optional chaining(オプショナルチェーン)も便利!

オプショナルチェーン(?.)を使うと、undefinednullを安全に扱いながら、プロパティにアクセスできます。


let user: { name?: string } = {};
console.log(user.name?.toUpperCase()); // undefined でもエラーにならない

undefined

このように、?.を使うことで、存在しないプロパティにアクセスしてもプログラムが止まらずにすみます。

7. nullとundefinedの違いはどう覚える?

7. nullとundefinedの違いはどう覚える?
7. nullとundefinedの違いはどう覚える?

初心者の方は、nullは「自分で空にした」undefinedは「まだ何もしてない」というイメージで覚えると分かりやすいです。

そして、TypeScriptでは型として明示的に| null| undefinedを付けることで、安全に扱うことができます。

まとめ

まとめ
まとめ

TypeScriptで最初に戸惑いやすい部分として、「値が存在しない状態」をあらわすnullundefinedの違いがあります。記事全体をふりかえってみると、この二つを正しく理解することで、プログラムの安全性や読みやすさがぐっと高まり、複雑なデータ構造や条件分岐を扱うときにも迷いが少なくなるという大きな利点に気づけます。とくに、初心者の段階では「なんとなく似ているから同じように扱ってしまう」という状況がおこりやすいですが、それぞれの役割や意味を意識することで、エラーを避けやすくなり、正しい型設計ができるようになります。 nullは「明示的に空にする」、undefinedは「まだ値が設定されていない」状態をあらわすという根本的な考え方をおさえておけば、型指定のときにも自然と判断しやすくなります。さらに、TypeScriptでは型に| null| undefinedを加えてゆるやかに表現することができ、必要に応じて安全性を高めることが可能です。記事の中でも紹介したように、条件分岐をつけることでエラーを防ぎ、値が存在しない場合の動作をあらかじめ決めておくことで、実際のアプリケーションでも予期せぬトラブルをへらすことができます。 また、近年のJavaScriptやTypeScriptにおいて、null合体演算子(??)optional chaining(?.)といった便利な構文が追加されたことで、nullundefinedの取り扱いはさらにやさしくなっています。とくにオプショナルチェーンは、深い階層のオブジェクトを扱うときに威力を発揮し、「もしあれば処理する、なければ止まらない」という自然な書き方ができるため、実務でも多く使われています。 以下には、今回の内容を総合的に復習できるサンプルプログラムをまとめてあります。同じタグ構成で書いているので、記事の流れの中でそのまま理解を深められるはずです。

null・undefinedの取り扱い復習サンプル


class UserStatus {
    name: string | null;
    age: number | undefined;
    memo?: string;

    constructor(name: string | null, age?: number) {
        this.name = name;
        this.age = age;
    }

    showInfo() {
        const safeName = this.name ?? "ななし";
        const safeAge = this.age ?? -1;

        console.log("なまえ:", safeName);
        console.log("ねんれい:", safeAge);

        console.log("めも:", this.memo?.toUpperCase() ?? "めもなし");
    }
}

let userA = new UserStatus(null, 20);
userA.memo = undefined;
userA.showInfo();

let userB = new UserStatus("たろう");
userB.memo = "よろしくお願いします";
userB.showInfo();

このサンプルの中では、nullundefinedを意識しながら「代わりの値を使う」「存在すれば処理する」という実際的なテクニックがふんだんに盛り込まれています。とくに、??による“あんしん値”の指定や、?.による安全なプロパティアクセスは、アプリケーション開発でも多用されるとても重要な知識です。こういった書き方が身につけば、型による安全性と柔軟性をバランスよく活かしたTypeScriptらしいコードが書けるようになるでしょう。 nullとundefinedを正しく理解しておくことで、条件分岐の取り扱い方が明快になり、読みやすいコードの作成にも繋がります。型情報を正確に書く習慣が身につけば、後からコードを読む自分も、チームの仲間も迷わなくなります。TypeScriptを扱ううえで欠かせない土台となる部分なので、学んだ内容をしっかり身につけておくと、より高度な型や複雑なデータ構造を扱う際にも大きな力となるでしょう。 それでは最後に、記事のポイントを振り返るため、生徒と先生の会話形式でまとめていきます。

先生と生徒の振り返り会話

生徒

「今日の内容で、nullundefinedが同じ“値がない”でも意味がちがうってよく分かりました!特に、『自分で空にしたのがnull』、『まだ何もないのがundefined』という言い方が覚えやすかったです。」

先生

「そのポイントをつかめたのは大きいですね。TypeScriptでは型に応じてどちらを許可するかをしっかり決めることが安全なコードにつながります。また、値がない可能性を前提に書く考え方も大事です。」

生徒

「optional chaining の ?. と null合体演算子の ?? も便利でした!とくに ?? は“なかったら代わりを使う”っていう感覚がわかりやすくて好きです。」

先生

「最近のTypeScriptでは欠かせない書き方ですね。とても実用的なので、これからのコードでもどんどん使えるはずです。値の存在を気にせずに書けるのは安心感がありますね。」

生徒

「サンプルコードもわかりやすかったです!実際に nullundefined を入れたときにどう動くのか、頭の中でイメージできました。」

先生

「その調子です。今回の学びは今後のTypeScriptの学習でもしっかり役立っていきますよ。型の意味を理解しながら書くという姿勢を続けていけば、さらに良いコードが書けるようになります。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

TypeScriptでnullとundefinedの違いは何ですか?

TypeScriptでは、nullは「開発者が明示的に空と設定した状態」、undefinedは「まだ何も値が設定されていない状態」を表します。どちらも値がないことを示しますが、意味と使い方が異なります。
カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptでPromiseの型推論をマスター!非同期処理とasync/awaitの基礎講座
New2
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
New3
JavaScript
JavaScriptのBigInt型とは?大きな整数の扱い方と活用例
New4
JavaScript
JavaScriptでスクロール位置を取得・操作する方法を完全解説!scrollTopなどDOM操作入門
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのクロージャーとは?仕組みと実践例をやさしく解説
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptで新しい要素を作成する方法(createElement, appendChildなど)
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptのプロジェクトをtscでビルドする基本操作を解説!初心者にもわかるステップバイステップ
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptでフォーム要素を操作するDOMテクニックを初心者向けに徹底解説
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで親要素・子要素・兄弟要素を取得する方法を初心者向けに徹底解説
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptでnull・undefinedを型ガードするテクニックを徹底解説!初心者でも理解できる安全なコードの書き方
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】