小编ds *_*lee的帖子

将枚举值映射到 TypeScript 中的各个类型

我有一段 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 …

enums typescript

8
推荐指数
1
解决办法
5004
查看次数

无法在保护模式下设置GS寄存器

我正在编写一个基于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)

x86 assembly nasm osdev bootloader

3
推荐指数
1
解决办法
242
查看次数

标签 统计

assembly ×1

bootloader ×1

enums ×1

nasm ×1

osdev ×1

typescript ×1

x86 ×1