Typescript 当逻辑上应该知道类型时,为什么必须使用类型断言?
我遇到了一个场景(如下所示),在这个场景中,逻辑上可以确定对象的类型,但无论如何我都必须使用类型断言,甚至似乎必须创建“预类型化”伪变量才能正确访问特定于类型的属性。我想知道有没有更有效的方法Typescript 当逻辑上应该知道类型时,为什么必须使用类型断言?,typescript,typescript-typings,Typescript,Typescript Typings,我遇到了一个场景(如下所示),在这个场景中,逻辑上可以确定对象的类型,但无论如何我都必须使用类型断言,甚至似乎必须创建“预类型化”伪变量才能正确访问特定于类型的属性。我想知道有没有更有效的方法 export type EventTypeItem = event1 | event2; enum Event { Event1, Event2 } interface event1 { readonly id: string; } interface eve
export type EventTypeItem =
event1 |
event2;
enum Event {
Event1,
Event2
}
interface event1 {
readonly id: string;
}
interface event2 {
readonly caller: ICaller;
}
interface ICaller {
readonly id: string;
}
export interface IEvent {
readonly eventItem: EventTypeItem;
readonly eventType: Event;
}
// IEvent event gets passed to component
let exampleUnknownEvent: IEvent; // to access id - we'd either follow '.id' or '.caller.id'
// but we don't know before hand what Event this will be
// within some function
const x = exampleUnknownEvent as event1; // this seems like an unnecessary assignment just to type assert
const y = exampleUnknownEvent as event2; // this seems like an unnecessary assignment just to type assert
if (exampleUnknownEvent.eventType === Event.Event2) {
return x.caller.id;
} // I'd rather return exampleUnknownEvent.caller.id as we've established type in 'if'
// e.g. exampleUnkownEvent.caller.id as event2
你要做的是打字保护,它应该会起作用。这是一个更简单的版本,没有额外的变量:
导出类型EventTypeItem=event1 | event2;
枚举事件{
事件1,
事件2
}
接口事件1{
只读id:字符串;
只读事件:event.Event1
}
接口事件2{
只读调用者:iCaler;
只读事件:event.Event2
}
接口振荡器{
只读id:字符串;
}
导出接口事件{
只读事件项:事件类型项;
}
例如Unknownevent:IEvent=/*在此处获取您的事件*/
if(例如Unknownevent.eventItem.event==事件.Event1){
log(例如unknownevent.eventItem.id);
}否则{
log(例如unknownevent.eventItem.caller.id);
}
您使用的是什么版本的TypeScript?您好,我使用的是3.4.1。看着你的版本(谢谢你的话),我意识到我的代码不准确-对不起。我已经更新了我的示例,以提供泛型IEvent对象上的事件类型,该对象由if语句检查。由于事件类型现在不直接在特定的事件类型上,我猜类型推断丢失了。