使用严格的空值检查,如何在TypeScript中将类型为“:string | undefined”的变量转换为“:string”?

时间:2016-10-17 08:43:11

标签: typescript

鉴于编译器选项strictNullChecks已启用。

假设我有一个返回:string|undefined的函数,我有另一个期望:string的函数,并且我检查它不是undefined,我该如何调用第二个功能,或将:string|undefined更改为:string

以下是一些示例代码:

function alpha(): string|undefined {
    return "hello";
}
function beta(s: string) {
    console.log(s);
}
function isEmpty(s: string|undefined): boolean {
    if (s === undefined) {
        return true;
    } else if (s.trim().length === 0) {
        return true;
    }
    return false;
}

const s = alpha();

if (isEmpty(s)) {
    throw new Error("Okay, I manually checked for undefined.");
}

beta(s);

这会导致错误:

Error:(22, 6) TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'.

1 个答案:

答案 0 :(得分:0)

通常你会使用类型防护来减少类型:

if (typeof s === 'string') {
    // s is string
    s.split(',');
} else {
    // s is boolean
    s.valueOf();
}

使用严格的空检查,您可以这样做:

if (typeof s === 'undefined')

或者更具体地说是你的情况:

if (typeof s === 'string') {
    beta(s);
}

对于没有使用严格空检查的人来说,这当然会有所不同,因为没有这个标志,字符串就已经是未定义的了。