首页 > 解决方案 > 升级到 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 中,它就好像它试图MyEnumundefined. 查看生成的 Javascript 仅显示使用 2.7 编译器,Enum 代码在使用 Enum 的代码之前生成,而在 3.5 中它在使用 Enum 的代码之后生成它。

我已经尝试指定完全限定的命名空间来访问枚举,然后它就可以工作了。但在我转向那个方向之前,我首先想弄清楚哪里出了问题。

我希望我的描述足够清楚。如果不是这样,请告诉我。

我的问题:这是一个错误还是我需要更改某些内容才能使其正常工作?

标签: typescriptimportnamespaces

解决方案


要尝试的一件事是将‛import =‛替换为‛import from‛,我相信import =只能与require配合使用


推荐阅读