我正在尝试改善解决此特定问题的方式
情况。
对于每个请求,我可能都会得到响应| EventNotification。
[当处理一个响应的并集时| EventNotification,如果不使用类型转换,然后在if语句上分支,我似乎无法解决]
示例:
请求:
{ type: 'something', age: 22 }
响应可以是:
type TypeOne = { Response: { key: 'key', age: 22} }
或
TypeTwo = { EventNotification: { key: 'trying to process your request' , age: 33 } }
然后,我有一个正在接受此响应并尝试分支的函数,但是为了使分支正常工作,我必须进行类型转换。
const a = response as TypeOne const b = response as typeTwo if(a){ // do stuff here safely. }else { // do stuff here safely. }
我仍然必须检查两者是否存在,但我不想强制转换。我希望我能使自己清楚。另一点可能是:如何在一个类型中的某个位置上,当一个属性被检查为真实时,例如在if语句中,则无法访问另一个属性?这可能吗?
让我们说:
Type A = { KeyOne?: { name: string, age: number}, KeyTwo?: { name: string, height: number} } const fn = (a:A) => { if(a.KeyOne) { // access OK // a.KeyTwo doesn't exist } else if(a.KeyTwo) { // access OK; // a.KeyOne doesn't exist type Error; } }
该方案可以用Typescript建模吗?谢谢。
我正在尝试改善解决这一特殊问题的方式。对于每个请求,我可能都会得到一个响应|事件通知。处理任何一个响应的并集时...
这听起来像您想要一个union type作为discriminated union,您可以在其中检查一个属性以过滤联合。这是我的处理方式: