[英]Why isn't typescript recognizing my type extensions?
Typescript should be able to tell which extension of a type you are dealing with based on its properties using switch case. Typescript 应该能够使用 switch case 根据其属性来判断您正在处理的类型的哪个扩展。
Here are my types:这是我的类型:
export enum MessageType {
CallEnd = "CallEnd",
L2Measurement = "L2Measurement",
}
export type TraceMessages = {
messageType: MessageType;
};
export interface TraceMessageL2Measurement extends TraceMessages {
messageType: MessageType.L2Measurement;
l2Measurement: L2MeasurementMessage;
}
export interface TraceMessageCallEnd extends TraceMessages {
messageType: MessageType.CallEnd;
callEnd: CallEndMessage;
}
export type TraceMessage =
| TraceMessages
| TraceMessageCallEnd
| TraceMessageL2Measurement;
Now, with a switch case structure like:现在,使用如下 switch case 结构:
switch (l2message.messageType) {
case MessageType.L2Measurement:
// Typescript should now know that l2message: TraceMessageL2Measurement
But Typescript does not understand this, and only offers the base type's (TraceMessages') properties.但 Typescript 不理解这一点,只提供基本类型的 (TraceMessages') 属性。 What am I doing wrong?
我究竟做错了什么?
Thanks!谢谢!
You just have to exclude TraceMessages
from definition of TraceMessage
:您只需从
TraceMessage
TraceMessages
export type TraceMessage =
| TraceMessageCallEnd
| TraceMessageL2Measurement;
Otherwise TypeScript can't get rid of the possibility of l2message
being a TraceMessage
with messageType: "L2Measurement"
, which do not have the l2Measurement
property.否则 TypeScript 无法摆脱
l2message
是带有messageType: "L2Measurement"
的TraceMessage
的可能性,它没有l2Measurement
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.