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つです。