类型字符串 | 即使在 if 检查和空断言之后也不允许为空“可能为空”
2021-04-09
95
我有一个变量定义为:
let filter: string | null;
然后我尝试使用它:
filter = "my query";
let translatedStatesName = ["query", "my"];
if(filter) {
const getFullWordfromQuery = translatedStatesName.filter((a) => a.toLowerCase().
includes(filter.toLowerCase()));
}
即使在 if 检查之后,编译器也会抱怨 filter“可能为空”,这可能是由于其类型。由于内部编码指南,我无法使用空断言,例如:
filter!
2个回答
尝试将过滤器的小写字母存储在变量中
if(filter) {
let toLowerCaseFilter = filter.toLowerCase();
const getFullWordfromQuery = translatedStatesName.filter((a) => a.toLowerCase().includes(toLowerCaseFilter));
}
Arsen
2021-04-09
TS 不知道箭头函数何时被调用,过滤器可以在那时被修改。
你可以捕获过滤器的值,让 TS 知道该值不会被重新分配。
if(filter) {
const filterCapture = filter;
const getFullWordfromQuery = translatedStatesName.filter((a) => a.toLowerCase().includes(filterCapture.toLowerCase()));
}
查看类似问题: 对象属性的类型保护推断在嵌套范围中丢失 #30576
Lesiak
2021-04-09