typescript - 如何使用联合类型修复 typescript "Property does not exist on type"?

标签 typescript

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

我想做这样的事情:

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

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

但我在 myvar.value 上收到错误“在类型 MyObject 上找不到属性‘值’”。

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

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

不幸的是,它没有用。

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

最佳答案

你可以尝试这样的事情:

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

关于typescript - 如何使用联合类型修复 typescript "Property does not exist on type"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57932828/

相关文章:

reactjs - 使用 React/Relay/Typescript 跨片段重用组件的最佳实践是什么?

javascript - TS2304 : Cannot find name 'require'

javascript - 无法向 Controller angularJs + CordovaJs (TypeScript) 注入(inject)服务

javascript - 将 localStorage 包装在 Angular2 服务中?

javascript - TypeScript 和运行时类型检查,2020 年的简单解决方案

typescript - 为什么这种类型的联合在 typescript 中被解析为一个交集?

typescript - 是否可以将部分通配符分配给 typescript 中的类型?

javascript - 如何在选中时设置 MUI 单选按钮上的标签样式

arrays - 将两个对象数组与 Angular 2 和 TypeScript 合并?

typescript - 如何在 Typescript 接口(interface)中引用 self 类型(对于 IClonable 接口(interface))