对象可能是“未定义” - 在包含未定义检查的过滤器之后

Posted

技术标签:

【中文标题】对象可能是“未定义” - 在包含未定义检查的过滤器之后【英文标题】:Object is possibly 'undefined' - after filter that contains check for undefined 【发布时间】:2018-07-20 05:11:43 【问题描述】:

我正在对这样的数组进行操作:

.filter(key => actions && actions[key])
.forEach(key => actions[key](event, dispatch));

但我在 forEach actions: Object is possibly 'undefined' 上遇到 TypeScript 错误。

但它不能是'undefined',因为它会针对那些确实具有actions的条目进行过滤。

【问题讨论】:

这总是可能是当前打字稿语言的错误或不足 @Andreas TS 错误专门针对actions,而不是actions[key] 【参考方案1】:

我认为 TypeScript 编译器不够聪明,无法意识到 filter 方法已经从数组中删除了所有 undefined 条目。在这种情况下,您可以告诉编译器 actions[key] 是通过使用非空断言运算符 ! 定义的,如本答案所述:

https://***.com/a/40350534/1063392

.filter(key => actions && actions[key])
.forEach(key => actions![key](event, dispatch));

【讨论】:

以上是关于对象可能是“未定义” - 在包含未定义检查的过滤器之后的主要内容,如果未能解决你的问题,请参考以下文章

检查对象属性时与未定义或“未定义”的比较。有什么不同?

即使未定义,也检查嵌套键是不是存在[重复]

打字稿对象可能未定义[重复]

JavaScript,检查嵌套对象属性是不是为空/未定义的优雅方法[重复]

如何在javascript中检查未定义的类型[重复]

处理可能包含未定义行为的项目