typescript - 如何使用联合类型修复打字稿“类型上不存在属性”?
问题描述
我正在尝试访问可能是也可能不是对象的变量的属性。如果变量是我想读取其“值”属性的对象,否则只需读取变量。
我想做这样的事情:
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)
。
不幸的是,它没有用。
编辑:是否有不需要强制转换为“任何”的解决方案?
解决方案
你可以尝试类似的东西:
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>
}
推荐阅读
- reactjs - 地图导致无效 - 预期字符串错误
- php - 错误状态 401 错误未经身份验证的 laravel 护照
- javascript - 使用打字稿中的任何道具定义对象
- json - Determine a JSON tag efficiently
- python - 如何在管理员中将用户添加到组
- android-studio - layoutsxxxhdpi 在 android studio 的几个设备上有区别?
- css - 删除表格单元格内文本的开始和结束间距
- firebase - 如何以编程方式获取 Firebase 实时数据库使用情况
- javascript - 时区偏移显示不正确的日期和时间
- java - 更改类导入的 IntelliJ 快捷方式是什么?