我有一段 TypeScript 代码,如下所示:
enum EventType {
EVENT_A = 'eventA',
EVENT_B = 'eventB',
... // more event types
}
interface Event {
type: EventType;
}
interface EventA extends Event {
type: EventType.EVENT_A;
data: PayloadForEventA;
}
interface EventB extends Event {
type: EventType.EVENT_B;
data: PayloadForEventB;
id: number;
}
... // More Event interfaces
Run Code Online (Sandbox Code Playgroud)
是否可以以某种方式将 的值映射EventType到相应的接口?如果不能自动完成,是否可以手动指定枚举值映射的类型?
我确实知道可以将值映射到类型,如这个问题所示。使用下面所示的方法,它可以创建我需要的查找表:
type EventTypeLut = {
'eventA': EventA,
'eventB': EventB,
// ...
};
Run Code Online (Sandbox Code Playgroud)
但此方法将 enum 的值硬编码到 LUT 中。枚举值将来可能会发生变化(我没有太多控制权),并且对枚举值进行硬编码使其更难以维护。
当我尝试用作EventType.EVENT_A键名时,TypeScript 抱怨“需要属性或签名”。使用模板字符串似乎也无济于事。(似乎无法计算键名,即使它是像 这样的常量表达式1+2 …
我正在编写一个基于OSDev Wiki和一些相关书籍的信息的操作系统.我发现在跳转到保护模式后,段初始化例程没有正确执行.这是我的第二阶段加载器和内核代码:
; stage2
; still -f bin
[org 0xd200] ; calculated by first stage loader
; GDTs are defined here
jmp entry
GDT_DESC_START:
GDT0:
dw 0 ; Limit 0~15
dw 0 ; Base 0~15
db 0 ; Base 16~23
db 0 ; Access Byte
db 0 ; Limit 16~19 + Flags
db 0 ; Base 24~31
DESCRIPTOR_CODE:
dw 0xffff ; Limit 0~15
CODE_BASE_AX dw 0 ; Base 0~15
CODE_BASE_EAHL db 0 ; Base 16~23
db 0x9a ; …Run Code Online (Sandbox Code Playgroud)