NonNullable<T>

最終更新:2026-10-22

NonNullable<T> NonNullable

NonNullable<T> は型 T から null と undefined を取り除きます。フィールドの宣言上は空を許すが、ここまで来る時点では業務が非空を保証している、という場面に向いています。デフォルト値によるフォールバックの後、配列のナローイングの後などです。本質は Exclude<T, null | undefined> の専用の別名です。

グループユーティリティ型
種類型
strict モード不要

ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。

📝 構文

type NonNullable<T> = T extends null | undefined ? never : T;

// 使い方
type Name = NonNullable<string | null | undefined>;  // string

function pickFirst(values: Array<string | null | undefined>): string {
  for (const v of values) {
    if (v != null) {
      const clean: NonNullable<typeof v> = v;
      return clean;
    }
  }
  return "(none)";
}

⚙️ パラメータ

T元の型です。通常は null/undefined のメンバーを含み、ユニオン型ならメンバーごとに空値を取り除きます

戻り値:新しい型です。T から null と undefined を除いた部分です。

▶ サンプル

下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:

出力:

Ada
(none)

(トランスパイル後の実行出力。型レベルでは CleanField は string | number であり、null/undefined は NonNullable によって取り除かれています。v != null で絞り込んだ後の値だけを代入でき、型チェックを通ります)

💡 ポイント

ℹ️ 説明 実装は type NonNullable<T> = T extends null | undefined ? never : T です。Exclude と同じ条件型の分配の書き方です。
💡 ヒント これは型しか変えず値は変えません。実行時の「空の除去」は v != null によるナローイング、?? のデフォルト値、Array.filter などに頼ります。型レベルのツールと実行時の後始末を組み合わせて初めて完全になります。
⚠️ 注意 確信のない空値を NonNullable で強引に「洗い替え」してはいけません。string | null を string と見なして書いてもコンパイルはエラーを出さず、実行時にはやはり null.dosomething で崩れます。空値は先に実行時のチェックで片付けるべきです。
ケースは今後追加予定です。

📚 関連チュートリアル

❓ よくある質問

Q NonNullable と非nullアサーション ! の違いは何ですか?
A 効果はどちらも「null/undefined を取り除く」ことですが、NonNullable は型の計算(再利用・組み合わせ可能な新しい型を生成)で、! は式レベルのアサーション(その場限りで、再利用できません)です。「空を除いた後の型」を独立した型として使いたいなら NonNullable を使いましょう。
Q NonNullable は boolean に影響しますか?
A false を取り除くことはありません。対象は null と undefined の2つのリテラルだけです。boolean | null に NonNullable を付けると boolean になり(true と false の両方を含みます)。
Q strictNullChecks を切っていれば NonNullable に意味はありますか?
A 非厳格モードでは null/undefined がもともとすべての型に代入可能なため、NonNullable のナローイングの効果は知覚できません。strictNullChecks と組み合わせて初めて意味があり、これも常に厳格モードを推奨する理由の1つです。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%