由于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!
}
是否有避免使用!
来防止警告的方法?
答案 0 :(得分:6)
这是一个解决方案:
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
和null
处理,并且编译器会错误地认为它不是字符串。Exclude
的参数是为了模拟布尔值的“ not”(它可以工作,但是我不确定为什么)。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);
}