首页 > 解决方案 > 未通过 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
  }
})

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

标签: typescripttypescript-typings

解决方案


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

推荐阅读