【问题标题】:Enum is not defined枚举未定义
【发布时间】:2018-04-13 07:47:23
【问题描述】:

我有枚举:

export enum Roles {
  user = 10,
  editor = 30,
  admin = 50,
}

我将其导入我的一项服务:

import { Roles } from '../enums/roles';

并在服务方法中使用:

  this.writeRole(
    Roles.user,
  );

当我在我的应用程序中调用此方法时,在控制台中出现错误:Cannot read property 'user' of undefined

但是当我只是在服务中而不是导入中编写相同的枚举(但没有export 关键字)时,它的工作完美。请解释一下,我做错了什么以及为什么我不能像类一样导入枚举?

【问题讨论】:

  • 您很可能没有从正确的位置导入您的枚举。你确定你的枚举的位置吗?
  • @trichetriche 绝对是,导入路径甚至由 ide 自动完成
  • 某些 IDE(我正在查看您的 VSCode)在您移动文件时不会从正确的路径导入:您需要重建索引,您可以通过按 F1 并输入“ reload" 重新加载窗口。
  • 您的错误仅在 AOT 中,还是在服务时出现?
  • @trichetriche 我几乎疯了,试图找出问题所在:D

标签: angular typescript enums


【解决方案1】:

此错误通常与您的 IDE 相关:让我们以 Visual Studio 代码为例(我正在使用它,显然您也在使用它)

当你创建一个文件时,VSCode 会将它添加到它的索引中。它允许您按 CtrlP 打开文件。

但是当你移动它时,VSCode 不会重建它的索引。这意味着它从错误的位置导入您的文件。

它会按照定义检测它,不会抛出任何错误(因为对他来说,他的索引是最新的),但在编译时会弹出问题。

为避免这种情况,您可以通过重新加载 VSCode 来重建索引(关闭它,或点击命令快捷键 (F1) 并键入“reload”),或者您可以使用诸如 Move Typescript,这对于移动文件非常有用。

【讨论】:

    【解决方案2】:

    在您的服务/组件中 - 只需执行“enum = Enum”:

    roles = Roles
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      相关资源
      最近更新 更多