我是Typescript的新手,并且正在create-react-project中使用它。我有一个名为/ typings的文件夹,我的tsconfig.json文件指向该文件夹,到目前为止,我已经将所有类型声明放入该文件夹中的 index.d.ts 文件中。
到目前为止一切顺利。我的项目的所有部分似乎都可以使用“类型”和“接口”声明。我不是从 index.d.ts 文件中明确导出它们,也不是将它们导入任何其他文件中。
当我声明以下内容时,问题就来了...
enum Gender {male, female}
当我尝试在其他文件中使用枚举时,出现错误...
Ambient const enums are not allowed when the '--isolatedModules' flag is provided
我在SO上还阅读了其他答案,其中说您应将枚举声明为const,但这无济于事。我还看到了建议,您应该在文件底部“未定义导出默认值” ,但是当我这样做时,项目的其余部分都无法使用其他类型。
最后,我尝试更改编译器选项以设置“ isolatedModules”:false ,但是在编译时它会自动切换回true。显然create-react-app总是可以做到的。
我该怎么做才能允许在index.d.ts文件中声明的枚举自动在项目的其余部分中使用?
答案 0 :(得分:4)
枚举不能进入d.ts
。
这样做的原因是,枚举具有已编译的输出,而其他.d.ts
如接口则没有。
例如:
enum Hello{
One = 'This is one',
Two = ''
}
编译为:
"use strict";
var Hello;
(function (Hello) {
Hello["One"] = "This is one";
Hello["Two"] = "";
})(Hello || (Hello = {}));
接口:
interface Hello {
test: string;
}
编译为:
// an empty file, as interfaces are only used during pre-compile not in Javascript.
.d.ts
文件未明确导入文件,因此,Typescript不知道在何处注入此文件内容。如您所知,Javascript是自上而下编译的,因此将该枚举注入到输出Javascript中的位置至关重要。
从历史上看,我们将枚举放入common.ts
文件和类中,并在需要使用枚举时将其导入。