typescript - 对象可能为空。打字稿错误
问题描述
如何修复 ESLint 错误:“对象可能为空”?在我的代码中,我正在检查 null,但无论如何都有错误
if (controlInput !== null) {
if (controlInput.match(/[$;.,'"-=!@#$%^&*()]/g).length !== 0) {
return 'some message'
}
}
解决方案
错误消息不是关于,controlInput
而是关于返回的值controlInput.match()
。
如果Array
的值controlInput
与正则表达式匹配或null
不匹配,则为。
常见的解决方案是将返回的值提取controlInput.match()
到变量中,然后仅在不是时才使用它null
。
if (controlInput !== null) {
const matches = controlInput.match(/[$;.,'"-=!@#$%^&*()]/g);
if (matches && matches.length) {
return 'some message';
}
}
但是,如果您不关心匹配的子字符串,而仅当字符串与正则表达式匹配时,您可以直接检查返回的值controInput.match()
:
if (controlInput !== null && controlInput.match(/[$;.,'"-=!@#$%^&*()]/g)) {
return 'some message';
}
或者,更好的是,使用RegExp.test()
. 它更快。
if (controlInput !== null && /[$;.,'"-=!@#$%^&*()]/.test(controlInput)) {
return 'some message';
}
关于正则表达式的一些想法
显然您想检查 的值是否controlInput
包含一些特殊字符。
在regexp
中,表达式[...]
称为“字符集”,它匹配方括号之间指定的字符列表中的一个字符。
大多数字符在字符集中表示自己。但是,字符集中有两个特殊字符。其中一个是^
但仅当它是字符集中的第一个字符(紧跟在 之后[
)。它否定了字符集的含义。
另一个特殊字符是-
,当它不是字符集中的第一个或最后一个字符时。[a-z]
不是指“一个a
,-
或z
”,而是“介于和之间的任何字符a
” z
,即任何小写字母。
正则表达式中的字符类包含字符集中匹配ASCII 代码"-=
之间以及包括"
和=
中的所有字符的片段。此子集包括、和您已包含在字符集中的其他字符。.
,
;
这就是为什么我认为您的意图不是包括之间的所有字符"
,而=
仅包括字符"
和。-
=
为了获得预期的行为(-
代表自己)-
在集合的开头或结尾移动。
if (controlInput !== null && /[-$;.,'"=!@#$%^&*()]/.test(controlInput)) {
return 'some message';
}
推荐阅读
- java - 线程“主”java.lang.RuntimeException 中的异常:等待 http://localhost:22198/healthz 在 20015 毫秒后可用时超时
- node.js - __dirname 在 nodejs 的打字稿中
- python - 为什么 pynput.mouse.Controller 的导入方式很重要?
- android - 无法从存储库中观察片段中的 LiveData
- assembly - 使用 IN 指令使 x86 程序崩溃
- excel - Private Sub Worksheet_Change VBA 代码合并问题
- androidx - Navigation 组件是否支持 Dialog Fragments 的动画?
- php - WP REST API:如何通过自定义插件使用 WordPress 更改每页的最大项目数?
- angularjs - angularjs NgTable ng-repeat groupby 显示/隐藏
- android - 如何使用 CMake 将 FreeType 导入我的 Android Studio NDK 项目