在 TypeScript 中检查 Null 或 Undefined
How to check for Null or Undefined in TypeScript
要检查null
or undefined
,将值与null
和
进行比较undefined
,例如if (name === undefined || name === null) {}
。如果满足这两个条件中的任何一个,变量将存储一个null
或undefined
值并且该if
块将运行。
type Name = null | undefined | string; let name: Name; // ✅ check if undefined or null if (name === undefined || name === null) { console.log('✅ variable is undefined or null'); } else { console.log('✅ variable is NOT undefined or null'); } // ✅ check if NOT undefined or null if (name !== undefined && name !== null) { console.log('✅ variable is not undefined or null'); }
在我们的第一if
条语句中,我们检查name
变量是否存储一个
undefined
或null
值。
第二个示例显示如何检查变量是否为 NOTundefined
或
null
。
您可能还会看到上面比较的较短版本:
type Name = null | undefined | string; let name: Name; // ✅ check if undefined or null if (name == null) { console.log('✅ variable is undefined or null'); } else { console.log('✅ variable is NOT undefined or null'); } // ✅ check if NOT undefined or null if (name != null) { console.log('✅ variable is not undefined or null'); }
请注意,我们使用了松散等号==
而不是严格等号===
。
当使用松散等于与比较时null
,您将同时null
与和
进行比较undefined
。
// 👇️ true (loose equals) console.log(null == undefined);
上面的语句在 TypeScript 中if
用作
类型保护。
type Name = null | undefined | string; let name: Name; if (name !== null && name !== undefined) { // 👇️ let name: string console.log(name); console.log(name.toLowerCase()); }
Name
类型可以null
是,undefined
或string
.
在if
语句中,我们检查变量是否不是null
和不是
undefined
。
如果满足这两个条件,TypeScript 就会知道该变量是 astring
并允许我们使用特定于字符串的方法,例如toLowerCase()
.
如果我们尝试toLowerCase()
直接调用该方法,而不检查变量是否不是null
and undefined
,我们会得到一个错误。
type Name = null | undefined | string; let name: Name; // ⛔️ Object is possibly 'null' or 'undefined'. console.log(name.toLowerCase());
您还可以使用类型保护来检查变量是否为 a string
,这在这种情况下是更直接的方法。
type Name = null | undefined | string; let name: Name; if (typeof name === 'string') { // ✅ TypeScript knows `name` is string console.log(name.toLowerCase()); }
一种检查变量是否是null
或undefined
将要使用可选链接 (?.) 运算符的更新方法。
type Name = null | undefined | string; let name: Name; console.log(name?.toLowerCase());
如果引用等于or ,
可选链接 (?.)运算符会短路而不是抛出错误。null
undefined
这就是为什么 TypeScript 允许我们检查该toLowerCase()
方法是否存在于name
变量上,即使它可能是null
or undefined
。
您还可以使用这种方法来检查对象上是否存在深度嵌套的属性。
type Person = { address?: { country?: string; }; }; const obj: Person = {}; console.log(obj?.address?.country?.toLowerCase());
如果引用等于null
or undefined
,可选的链接运算符将短路并返回undefined
,并且不会抛出任何错误。