【问题标题】:undefined is not being discarded through typeof check未通过 typeof 检查丢弃未定义
【发布时间】:2021-10-22 06:13:26
【问题描述】:

有人可以解释为什么这不起作用吗?

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
  }
})

我希望只得到字符串 |编号,有什么改进的建议吗?

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:
    1. typeof 表达式返回一个字符串,所以 !== undefined 不正确。
    2. o[v] 分配给一个变量。从技术上讲,o[v] 可以 指向 if 语句中与内部块不同的值(例如,v 可以更改),因此分配给变量告诉 TS 它是相同的正在检查的值。
    a.forEach((v) => {
      const value = o[v]; 
      if (typeof value !== "undefined") {
        let a = value // type string | number
      }
    })
    

    【讨论】:

    • 在谢谢你之前我还没有听说过这种技术!节省了我数小时的研究时间
    • 很高兴我能帮上忙。请记住,您应该accept an answer 让其他人知道您的问题已经解决。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2011-02-11
    • 2011-06-11
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多