鉴于编译器选项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'.
答案 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);
}
对于没有使用严格空检查的人来说,这当然会有所不同,因为没有这个标志,字符串就已经是未定义的了。