在“.d.ts”中导出枚举会导致“无法解析”错误

Kai*_*ger 9 typescript

enum昨天我在我们的文件中添加了一个app.d.ts,其中包含大多数全局应用程序特定类型。

\n

该文件大致如下所示:

\n
// app.d.ts\nexport module App\n{\n    // \xe2\x80\xa6 more definitions\n\n    enum MyEnum\n    {\n        A,\n        B,\n        C,\n        D\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这本身编译得很好。现在,如果您尝试在不同的文件中使用所述枚举,如下所示:

\n
// a.ts\nimport {App} from "./app";\n\nlet something = App.MyEnum.A;\n
Run Code Online (Sandbox Code Playgroud)\n

TypeScript 抱怨它突然无法解析该文件app.d.ts

\n

TypeScript 编译错误

\n

经过大量调试和阅读文档后,我发现了以下免责声明

\n
\n

枚举是运行时存在的真实对象

\n
\n

因此,当MyEnumapp.d.ts它自己的MyEnum.ts文件移动并显式导出它时,它突然起作用了:

\n
// MyEnum.ts\nexport enum MyEnum\n{\n    A,\n    B,\n    C,\n    D\n}\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • \n
\n
// a.ts\nimport {MyEnum} from "./MyEnum";\n\nlet something = MyEnum.A;\n
Run Code Online (Sandbox Code Playgroud)\n

所以现在我真正的问题是:这是因为 TypeScript 不会将枚举值内联到常量中(除非您正在使用const enum),而是将它们保留为真实对象,并且因为文件.d.ts在编译时基本上被丢弃了TypeScript 转换为 JavaScript,它失败并出现这种非常奇怪且不相关的错误消息?

\n

Ren*_*ert 8

由于我刚刚遇到了同样的错误,并且您的问题帮助我立即修复了它(谢谢!),我认为您问题的答案是:是的,enum从文件导出/导入 s.d.ts不起作用,并导致这有点误导错误。

不过,有效的方法是将.ts具有相同名称的文件放在同一位置,以便在您的情况下app.d.ts共存app.ts于同一文件夹中。这使您enum无需更改导入即可导入。导入仍然适用于import { MyEnum } from "./app";您的情况。