以更多打字稿方式解决问题

问题描述 投票:0回答:1

我正在尝试改善解决此特定问题的方式

情况。

对于每个请求,我可能都会得到响应| 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建模吗?谢谢。

我正在尝试改善解决这一特殊问题的方式。对于每个请求,我可能都会得到一个响应|事件通知。处理任何一个响应的并集时...

typescript conditional-types
1个回答
0
投票

这听起来像您想要一个union type作为discriminated union,您可以在其中检查一个属性以过滤联合。这是我的处理方式:

© www.soinside.com 2019 - 2024. All rights reserved.