引用从npm类型导入的枚举时出错,

时间:2018-06-26 04:44:52

标签: typescript npm

我最近在私人npm模块中添加了键入内容。

模块的导出类型之一是以下枚举:

export enum ServerResponseCode {
  LoginFailed: 'loginFailed',
  LoginExpired: 'loginExpired'
}

然后将其由另一个打字稿项目导入,并按以下方式使用:

import { ServerResponseCode } from 'private-module'

if(response.code === ServerResponseCode.LoginExpired)

此代码不会引发任何编译错误,但在运行时会出现错误:“无法读取属性LoginExpired of undefined”

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

解决方案是简单地在私有模块的类型声明文件中导出const enum

export const enum ServerResponseCode {
  LoginFailed: 'loginFailed',
  LoginExpired: 'loginExpired'
}

对此stackoverflow thread的简短解释:

将枚举定义为const,以便对其内联的任何引用都被内联(由ts编译器),这样可以避免在运行时查找实际上是{{1}的ServerResponseCode对象}(因为.d.ts文件不会生成任何JS)。