打字稿d.ts文件中的枚举

时间:2020-05-30 22:46:43

标签: typescript enums create-react-app

我是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文件中声明的枚举自动在项目的其余部分中使用?

1 个答案:

答案 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文件和类中,并在需要使用枚举时将其导入。