在alpha
中,我检查结果是否为null
,如果是,则检查throw new Error
,但编译器仍显示编译错误:
const obj = {
objMethod: function (): string | null {
return 'always a string';
},
};
function alpha() {
if (obj.objMethod() === null) {
throw new Error('type guard, but compiler does not count it as one :( ');
}
const beta: string = obj.objMethod();
console.log(beta);
}
但是此代码可以很好地工作:
const obj = {
objMethod: function (): string | null {
return 'always a string';
},
};
function alpha() {
const result = obj.objMethod();
if (result === null) {
throw new Error('this DOES count as a type guard. ');
}
const beta: string = result; // no error
console.log(beta);
}
答案 0 :(得分:1)
Typescript无法证明您的objMethod
将始终返回相同的值。它可能在第一次调用时返回非null值,而在第二次调用时返回null。如果将其分配给const变量,则检查将断言该变量不为null。由于该变量为const,因此赋值后该值不能更改,因此,如果它通过了检查,则该值必须为非空。