我最近在私人npm模块中添加了键入内容。
模块的导出类型之一是以下枚举:
export enum ServerResponseCode {
LoginFailed: 'loginFailed',
LoginExpired: 'loginExpired'
}
然后将其由另一个打字稿项目导入,并按以下方式使用:
import { ServerResponseCode } from 'private-module'
if(response.code === ServerResponseCode.LoginExpired)
此代码不会引发任何编译错误,但在运行时会出现错误:“无法读取属性LoginExpired of undefined”
为什么会这样,我该如何解决?
答案 0 :(得分:1)
解决方案是简单地在私有模块的类型声明文件中导出const enum:
export const enum ServerResponseCode {
LoginFailed: 'loginFailed',
LoginExpired: 'loginExpired'
}
对此stackoverflow thread的简短解释:
将枚举定义为const
,以便对其内联的任何引用都被内联(由ts编译器),这样可以避免在运行时查找实际上是{{1}的ServerResponseCode
对象}(因为.d.ts文件不会生成任何JS)。