繁体   English   中英

你如何创建一个枚举模块?

[英]How do you create a module of an enum?

试验场

我正在尝试将编译时值添加到现有枚举。 基础在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 为枚举生成 object,类似于:

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

因此,您需要将新属性添加到此 object:

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

工作示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM