0

我有一个变量定义为:

let filter: string | null;

然后我尝试使用它:

filter = "my query";
let translatedStatesName = ["query", "my"];

if(filter) {
    const getFullWordfromQuery = translatedStatesName.filter((a) => a.toLowerCase().
        includes(filter.toLowerCase()));
}

即使在 if 检查之后,编译器也会抱怨过滤器“可能为空”,这可能是由于它的类型。由于内部编码指南,我 _cannot_use null 断言,例如:

filter!

如何在不使用空断言的情况下解决它?Playground: https://www.typescriptlang.org/play?ssl=8&ssc=2&pln=2&pc=1#code/DYUwLgBAZglsYgE4C4IGcyJgOwOYQB8JsBXYYAbgFgAoWeJCAXggCIBbATwgEcSlOrajVCRMAQ2xpg4hABMAymFkg0AOXHsQzCAG1WfAawA0bLqwC6w2jCgAKegkQBKCAG9aELxADGAeylIXHAAMTJgAHU-RDkoRD92AEV+RG4WCSkZeSUVdU0QADpHJDs7cVcmAD4IcQKwPwAZPwB3JABhcTQQO2cCz28BnB9gEjlVBzgnOsaW9s7u50XhAF9aWgB6ddJyGrQuxDAYAOhJpABCYj9IcXJZuSA

4

2 回答 2

1

TS不知道什么时候调用了箭头函数,那个时候可以修改filter。

您可以捕获过滤器的值,让 TS 知道该值不会被重新分配。

if(filter) {
    const filterCapture = filter;
    const getFullWordfromQuery = translatedStatesName.filter((a) => a.toLowerCase().includes(filterCapture.toLowerCase()));
}

游乐场链接

请参阅类似问题:对象属性的类型保护推断在嵌套范围中丢失 #30576

于 2021-04-09T08:34:00.690 回答
1

尝试将小写的过滤器存储在变量中

if(filter) {
    let toLowerCaseFilter = filter.toLowerCase();
    const getFullWordfromQuery = translatedStatesName.filter((a) => a.toLowerCase().includes(toLowerCaseFilter));
}
于 2021-04-09T08:36:14.293 回答