NonNullable
是 TypeScript 提供的一个 条件类型工具,用于移除某个类型中可能为 null
或 undefined
的部分。它返回一个新的类型,去除了 null
和 undefined
。
基本使用
假设我们有一个类型,它可能包含 null
或 undefined
,我们想从中排除这些值,得到一个没有 null
或 undefined
的类型。
移除 null
和 undefined
,如下代码所示:
type A = string | number | null | undefined; // A 是 string | number | null | undefined
// 使用 NonNullable 移除 null 和 undefined,得到 string | number
type Result = NonNullable<A>; // Result 是 string | number
在这个例子中,A
类型包含了 string | number | null | undefined
,而使用 NonNullable<A>
后,Result
类型会移除 null
和 undefined
,只保留 string | number
。
接下来我们再讲解一个在函数中的应用的例子:
type Callback = (value: string | null | undefined) => void;
// 使用 NonNullable 去掉参数中的 null 和 undefined
type NonNullableCallback = (value: NonNullable<string | null | undefined>) => void;
// 结果:NonNullableCallback 的参数类型是 string
这里我们用 NonNullable
过滤掉了 string | null | undefined
中的 null
和 undefined
,得到的类型是 string
。
实现原理
NonNullable
是通过 条件类型 实现的,它检查类型 T
是否是 null
或 undefined
,如果是,就移除它们。
它的实现原理可以通过以下方式表示:
type NonNullable<T> = T extends null | undefined ? never : T;
在上面的代码实现中,主要有以下实现:
-
T extends null | undefined
:判断类型T
是否是null
或undefined
。 -
如果
T
是null
或undefined
,则返回never
,表示排除这些类型。 -
如果
T
不是null
或undefined
,则返回T
本身,保留该类型。
总结
NonNullable<T>
是 TypeScript 的一个条件类型工具,用于从类型 T
中移除 null
和 undefined
。它返回一个新类型,其中不包含 null
和 undefined
,确保类型中只保留有效的值类型。NonNullable
常用于确保函数参数或变量的值不会是 null
或 undefined
,提高代码的类型安全性。通过 NonNullable
,我们可以避免在处理类型时出现空值相关的错误。