【发布时间】:2015-09-09 12:28:19
【问题描述】:
到目前为止,我一直在使用 typescript 内部模块并包含 10 个脚本标签来引导我的应用程序。我目前正在将项目转换为使用外部模块(使用 browserify),但我不知道应该如何转换枚举。
我曾经有过类似的东西:
mymodule.submodule {
enum MyEnum {
one,
two,
three
}
}
我会在其他模块中使用它:
var val:mymodule.submodule.MyEnum = mymodule.submodule.MyEnum.one;
并且正确编译为 js。将项目转换为使用外部模块后,我将所有接口都移到 *.d.ts 文件中,并考虑将枚举也放在那里,但这当然会产生错误,因为 js 中的枚举和数字之间没有映射. 然后我将枚举移动到 *.ts 文件中,以便编译它们。问题是,如果我把它们写成:
export enum MyEnum{
one,
two,
three
}
export enum OtherEnum {
four,
five,
six
}
这适用于要求我的代码中的枚举为:
import Enums = require('./enums');
var val = Enums.MyEnum.one; //this works
var val1: mymodule.submodule.MyEnum = Enums.MyEnum.one; //ERROR: incompatible types
但是与mymodule.submodule.MyEnum 类型不兼容。
那么我怎样才能同时声明枚举类型,以便我可以在 d.ts 文件中声明变量类型,但还要依赖实际生成的枚举代码(以便正确加载)并在 .ts 文件中使用?
注意:这些枚举在许多模块中使用,因此将它们包含在它们使用的同一个文件中并不是一个解决方案。
更新关于接口声明: 可能不清楚为什么我将原始枚举声明保留在 d.ts 文件中,所以我添加了一个示例。
在我目前拥有的 interfaces.d.ts 中:
declare module mymodule.submodule {
enum MyEnum{
one,
two,
three
}
interface ISomething{
aValue: MyEnum;
aFunction: (anArg: MyEnum) => void;
}
}
据我所知,我不能在 .d.ts 文件中使用 import 语句,那么如何在所有情况下都使用一个枚举声明?
【问题讨论】:
标签: typescript browserify