Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
191 views
in Technique[技术] by (71.8m points)

angular - Typescript: Get Exclusive Members from Union Class Type

How do I get the Exclusive Member from a Union Typescript?

selectedQueueItems: Array< TestA | TestB > = [];

TestA has a class member called Food, that TestB does not have. However most of the other class members are similar between each.

Receiving Error:

Property 'Food' does not exist on type 'TestA | TestB'.

Property 'Food' does not exist on type 'TestB'

Currently working with existing design in our code base.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You'd need a runtime check to ensure the method you are calling exists.

In this case, you would check to see if each object is an instance of the class that you know has a Food member:

for (const item of selectedQueueItems) {
  if (item instanceof TestA) {
    console.log(item.Food)
  }
}

If the objects are created with new TestA() or new TestB() then this will work fine. If you are creating those object other ways, then you would need to test that in different ways. That really depends on what those objects are and how you build them. But it may involve discriminated unions.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...