typescript - 未通过 typeof 检查丢弃未定义
问题描述
有人可以解释为什么这不起作用吗?
let o: { a?: number; b?: string } = {}
let a: ['a', 'b'] = ['a', 'b']
a.forEach((v) => {
if (typeof o[v] !== "undefined") {
let a = o[v] // type string | number | undefined
}
})
我希望只得到字符串 | 编号,有什么改进的建议吗?
解决方案
typeof
表达式返回一个字符串,所以!== undefined
是不正确的。- 赋值
o[v]
给一个变量。从技术上讲,o[v]
可以if
在语句中指向与内部块不同的值(例如v
可以更改),因此分配给变量会告诉 TS 它是一个并且被检查的值相同。
a.forEach((v) => {
const value = o[v];
if (typeof value !== "undefined") {
let a = value // type string | number
}
})
推荐阅读
- angular - Angular url 更改不会导致组件被重新创建
- phaser-framework - 在画布上正确定位背景图像移相器
- angular - 在 chart.js 中暂停水平滚动以获取实时数据
- performance - 添加更多内存片会增加整体内存带宽吗?
- installation - 如何使用 pendrive 实时运行任何操作系统并制作便携式操作系统
- ansible - 如何在 OpenShift Ansible 项目中限制对节点的供应
- sql - 是否可以用 WITH CLAUSE 替换 SUB QUERIES?
- android - 如何将 Glide 与 GridView 一起使用?(安卓/科特林)
- angularjs - 使用 routeParams 观看路线不起作用
- sql - 如何在 GROUP BY c 之后计数(DISTINCT a,b)