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