如何创建枚举模块?

How do you create a module of an enum?

Tests ground

我正在尝试向现有枚举添加编译时值。 基地在src/abc.ts

export enum Test {
  a,
  b,
  c
}

并且模块在 src/def.ts

import { Test } from "./abc";

declare module "./abc" {
  export enum Test {
    d = 3,
    e = 4,
    f
  }
}

现在我正在尝试在 src/index.ts

中记录 Test 枚举
import { Test } from "./abc";
import "./def";

console.log(Test);

编辑器的自动完成找到三个额外的枚举值(在自动完成列表中建议它们)
但是当你 运行 脚本时,只有默认值

Object {…}
0: "a"
1: "b"
2: "c"
a: 0
b: 1
c: 2

值已记录! def 缺失。
我错过了什么?

您只是在修改类型定义,而不是值。 Typescript 为枚举生成对象,例如:

var Test;
(function (Test) {
    Test[Test["a"] = 0] = "a";
    Test[Test["b"] = 1] = "b";
    Test[Test["c"] = 2] = "c";
})(Test || (Test = {}));

因此您需要向该对象添加新属性:

const enumObject: any = Test;
enumObject[enumObject["d"] = 3] = "d";
enumObject[enumObject["e"] = 4] = "e";
enumObject[enumObject["f"] = 5] = "f";

Working example