首页 > 解决方案 > 如何使用联合类型修复打字稿“类型上不存在属性”?

问题描述

我正在尝试访问可能是也可能不是对象的变量的属性。如果变量是我想读取其“值”属性的对象,否则只需读取变量。

我想做这样的事情:

interface MyType {
    myvar: string | MyObject
}
interface MyObject {
    value: string
}

function MyComponent({myvar}: MyType){
    return(
        <div>
            {myvar.value? myvar.value : myvar}
        </div>
    )
}

但我在myvar.value.

我试过检查变量是否是一个对象{typeof myvar === "object" ? myvar.value : myvar} ,但没有运气。

我发现了这个打字稿问题https://github.com/Microsoft/TypeScript/issues/28138 他们建议使用 if("value" in myvar)or if(myvar.value !== undefined)

不幸的是,它没有用。

编辑:是否有不需要强制转换为“任何”的解决方案?

标签: typescript

解决方案


你可以尝试类似的东西:

const getValueType = (myvar: any) => {
   if (myvar typeof === "object") {
      return myvar.value
   } else {
     return myvar
   }
}

or this: 

const getValueType = (myvar: any) => {
   (myvar typeof === "object") ? myvar.value : myvar
}

render(){
  const value = getValueType(myvar)
  <div>
      {value}
  </div>
}

推荐阅读