typescript - TypeScript 具有 strictNullChecks 和检测空值的功能
问题描述
由于 Javascript 的性质,我!= null && != ''
一直在检查值是否为空,因此我创建了一个函数来检查值是否为空,如下所示:
const isEmpty = (variable: any, allowEmptyString?: boolean): boolean => {
return variable == null || (variable == '' && !allowEmptyString);
};
问题是,其他方法不知道这意味着什么,所以我必须一直使用!
来防止警告,例如:
const foo = (val?: number): void => {
let a = 0;
if (!isEmpty(val)) {
a = val;
// let a: number;
// Type 'number | undefined' is not assignable to type 'number'.
// Type 'undefined' is not assignable to type 'number'
}
};
我目前的解决方案是:
if (!isEmpty(val)) {
a = val!
}
有没有办法避免使用!
来防止警告?
解决方案
这是一个解决方案:
function isEmpty(variable: string | null | undefined, allowEmptyString?: boolean): variable is Exclude<undefined | null, string>
function isEmpty<T>(variable: T | null | undefined): variable is Exclude<undefined | null, T>
function isEmpty(variable: any, allowEmptyString = false): boolean {
return variable === null
|| variable === undefined
|| (variable === '' && !allowEmptyString);
}
笔记:
- 使用
===
代替==
; - 重视
undefined
价值观; - 默认情况下(没有将参数
allowEmptyString
设置为true
),空字符串被处理为undefined
andnull
,编译器会错误地认为它不是字符串。 - 的参数
Exclude
被反转以模拟布尔值的“非”(它有效,但我不确定为什么)。
… 或exists
函数
但我建议使用一个exists
函数以避免双重反转。它更容易编写,也更容易使用:
function exists(variable: string | null | undefined, allowEmptyString?: boolean): variable is string
function exists<T>(variable: T): variable is NonNullable<T>
function exists(variable: any, allowEmptyString = false): boolean {
return variable !== null
&& variable !== undefined
&& (variable !== '' || allowEmptyString);
}
推荐阅读
- c# - 如何等待作者做出反应 discord.net
- c++ - MacOS上的Xcode 11项目不在一个函数中使用sin和cos:未定义符号“___sincosf_stret”
- here-api - 在自动完成中过滤建议
- c++ - 类和构造函数中的函数根本不起作用,也不返回任何错误
- python - 为什么运行这个 python 脚本会占用我所有的磁盘空间?
- c# - 如何从 SSMS 脚本调用 C# app / .exe 以在本地运行,而不是在服务器上运行?
- java - 片段中 EditText 上的空指针异常
- informix - 在 informix DB 中是否定义了任何 alpha 逻辑
- rasa-core - 如何处理rasa表单确认或拒绝actions.py
- css - 垂直对齐 CheckboxTableCell 的 CheckBox