我最近向私有 npm 模块添加了类型。
该模块的导出类型之一是以下枚举:
export enum ServerResponseCode {
LoginFailed: 'loginFailed',
LoginExpired: 'loginExpired'
}
Run Code Online (Sandbox Code Playgroud)
然后它被另一个 typescript 项目导入并使用如下:
import { ServerResponseCode } from 'private-module'
if(response.code === ServerResponseCode.LoginExpired)
Run Code Online (Sandbox Code Playgroud)
此代码不会引发任何编译错误,但在运行时我收到错误:“无法读取未定义的属性 LoginExpired”
为什么会发生这种情况?我该如何解决?
解决方案是简单地在私有模块的类型声明文件中导出一个常量枚举:
export const enum ServerResponseCode {
LoginFailed: 'loginFailed',
LoginExpired: 'loginExpired'
}
Run Code Online (Sandbox Code Playgroud)
此stackoverflow 线程的简短说明:
枚举被定义为const使得对其元素的任何引用都是内联的(由 ts 编译器),这样可以避免运行时查找ServerResponseCode实际的对象undefined(因为 .d.ts 文件不会生成任何 JS)。
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |