typescript - 打字稿说 pa 可以在 if (pa !== undefined) 的正文中未定义
问题描述
type T = {
a?: {[key:string]:boolean}
}
const f = (p: T):void => {
if (p.a !== undefined) {
Object.keys(p.a).forEach(k => { p.a[k] = false;})
}
}
pa inp.a[k]
错误地用消息下划线:“对象可能是'未定义'。(2532)”。
改变没有帮助if (p.a !== undefined) {
。if (!p.a) {
解决方案
问题取决于范围。
p.a[k] = false;
在您为 forEach 循环声明的函数内运行。该函数不在检查 是否存在的同一范围内p.a
,因此,打字稿不能保证p.a
不会未定义。
更多信息可以在这个相关问题中找到https://github.com/Microsoft/TypeScript/issues/30576
您可以通过多种方式解决此问题。一种明显但奇怪的方式可能是:
if (p.a !== undefined) {
Object.keys(p.a).forEach(k => {
if (p.a !== undefined) {
p.a[k] = false
}
})
}
另一个,如果p.a
只是您输入的对象文字,则可能是:
for (let k in p.a) {
p.a[k] = false
}
你甚至不需要在if (p.a !== undefined) {
这里检查。
推荐阅读
- asp.net - 如何将自定义库添加到 ASP.NET MVC
- excel - 根据源单元格更改图表颜色(条形图)(使用条件格式和 VBA)
- javascript - 续集:在 DATE 使用 LIKE
- c++ - 包括具有一级间接的标题?
- javascript - 如何从firebase实时更新状态?| 反应.js
- snakemake - snakemake 将文件夹定义为输出
- xpath - 有没有办法通过 Xpath 切换到 JMeter 脚本来运行部分脚本
- javascript - 如何使用 jQuery/JavaScript 仅在特定页面上将 h3 更改为 h2
- angular - 如何让我的 Jasmine 测试在 mergeMap 中达到这个回调?
- javascript - Uncaught SyntaxError: Unexpected token export - 如何设置库