我觉得这有一个简单的答案,但我无法理解有关合并多个文件的文档。
// a.ts
enum Color{
RED,
BLUE
}
// b.ts
enum Day{
MONDAY,
TUESDAY
}
// c.ts
import * as Types from "a, b";
console.log(Types.Color.RED, Types.Day.MONDAY);
我有多个文件中的枚举,但希望它们都可以通过一个标识符使用。显然c.ts
中的逗号符号没有任何意义,那么我怎样才能实现console.log
正在做的事情呢?
我玩过命名空间和模块,但还没有语法正确的东西。
答案 0 :(得分:0)
嗯,你有两个选择:
可以在不同文件中合并声明,但前提是它们是纯声明文件,而不是模块。
你可以这样做:
a.d.ts:
declare enum A {
a = 0,
b,
}
b.d.ts:
declare enum A {
c,
d
}
test.ts:
const a = A.a;
const c = A.c;
这是因为A
枚举属于全局范围,因此TypeScript会合并它们。它也适用于命名空间。
但是,当您将其中一个文件转换为模块时,它将停止工作。
如果你在b.d.ts结束时这样做:
export = A;
现在该文件正在导出某些东西:它变成了一个模块,在该文件中声明的所有内容都属于该模块的范围。
现在,在test.ts中,行const c = A.c
将指示错误。全局枚举A
只有两个值:a
和b
。
因此,如果您的枚举是在模块文件中声明(导出某些内容),那么您就无法混合这些声明。
在这种情况下,您应该将定义文件添加到项目(d.ts
)文件中,并在其中定义枚举,然后它将全局可用。事实上,这将是最好的方法,因此修改该枚举只有一点。合并不同文件中的声明对命名空间很有用,但对于枚举来说真的没有用处:
A-enum.d.ts:
declare enum A {
a = 0,
b,
c,
d,
}