typescript - 升级到 TypeScript 3.5 导致导入的命名空间在运行时无法找到 Enum
问题描述
我设法将旧的 Angular.js 应用程序从 Typescript 2.7 升级到 3.5,并且成功地使用tsc.exe
. 运行应用程序时,在代码的某些部分会收到以下类型的错误消息:
TypeError:无法读取未定义的属性“EnumLiteral1”
因此,假设我在 Typescript 中有一个 Enum(未const
在声明中使用),如下所示:
namespace App.Contracts {
export enum MyEnum {
EnumLiteral1,
EnumLiteral2,
...
}
}
当我有需要使用这个枚举的代码时,我曾经有这个用于 Typescript 2.7 的导入:
import MyEnum = App.Contracts.MyEnum;
用法只是一个普通的 Enum 语句:MyEnum.EnumLiteral1
.
因此,当我在 2.7 中编译它时,它工作得很好,但在 3.5 中,它就好像它试图MyEnum
像undefined
. 查看生成的 Javascript 仅显示使用 2.7 编译器,Enum 代码在使用 Enum 的代码之前生成,而在 3.5 中它在使用 Enum 的代码之后生成它。
我已经尝试指定完全限定的命名空间来访问枚举,然后它就可以工作了。但在我转向那个方向之前,我首先想弄清楚哪里出了问题。
我希望我的描述足够清楚。如果不是这样,请告诉我。
我的问题:这是一个错误还是我需要更改某些内容才能使其正常工作?
解决方案
要尝试的一件事是将‛import =‛替换为‛import from‛,我相信import =只能与require配合使用
推荐阅读
- postfix-mta - 后缀 header_checks 一般理解但有更多问题
- asp.net-mvc-5 - 使用 Form-Control 类选择后 MVC 下拉列表不显示值
- javascript - 如何停止和播放猫头鹰轮播 onclick 项目
- php - 如何在 wordpress 页面中使用 $_GET
- android - 由于 TypeLoadException,Xamarin 和 OpenTK Android 无法启动
- c# - 如何仅为我的程序(c#,winform)在Windows 10中禁用“滚动非活动窗口”
- java - 什么是 StubRoutines::jbyte_disjoint_arraycopy
- azure - 连接到 Blob 存储“在配置中未找到它们的凭据”
- mdx - iccube中的MDX钻中级
- r - 当数据集中没有符合输入的观察值时,对闪亮的 selectizeInput 进行过滤并显示空白图