首页 > 解决方案 > 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!
}

有没有办法避免使用!来防止警告?

标签: typescript

解决方案


这是一个解决方案:

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),空字符串被处理为undefinedand null,编译器会错误地认为它不是字符串。
  • 的参数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);
}

推荐阅读