typescript - 可以是多键打字稿之一的类型
问题描述
我有一个界面
interface Test {
property: SpecialProperty;
}
现在SpecialProperty
可以是每个之一:
export type SpecialProperty= {
withPropA: PropA;
}
| {
withPropB: PropB;
}
| {
withPropC: PropC;
}
不能有withPropA
和其他财产等..
问题是编译器不允许我这样做。
如果我做
function(param: Test ) {
if(param.property.withPropA) {
const prop:PropA = param.property.withPropA;
}
if(param.property.withPropB) {
const prop:PropB = param.property.withPropB;
}
}
编译器说
类型 '{ withPropB: PropB; 上不存在属性 'withPropA' }'。
我试过铸造等......但没有
解决方案
您需要使用属性存在检查来缩小类型param.property
而不是真实性检查:
function example(param: Test ) {
if ("withPropA" in param.property) { // ***
const prop:PropA = param.property.withPropA;
}
if ("withPropB" in param.property) { // ***
const prop:PropB = param.property.withPropB;
}
}
您的真实性检查要求您读取该属性的值,但是当您要求它这样做时,TypeScript 并不知道该对象是否具有该属性。
推荐阅读
- ffmpeg - 如何使用 ffmpeg 将视频 720:1280 更大的高度、宽度和裁剪调整为 1280:720?
- django - 如何使用 Ngnix 和 GUnicorn 在单个服务器上部署多个 Django 应用程序?
- javascript - 事件循环如何适用于 nodejs 中的多个浏览器和服务选项卡
- c++ - 如何实现两个成员函数(push_front 和析构函数)?
- django - Django REST 使用对称字段获取查询
- python - Pandas 以不寻常的方式格式化文件并删除一些指标
- javascript - 在 `useEffect` Hook 中转换 `this.page`?在 React + TS 中配置 Disqus 时出现“this.”错误说“对象可能未定义”?
- flutter - 我是一个颤抖的初学者我正在使用 date_picker_timeline 小部件,我希望日期选择器在我按下按钮时跳转到特定日期
- flutter - 我可以随机显示 SizeBox 小部件吗?
- javascript - × TypeError:无法读取 null 的属性“地图”