编译时未定义TypeScript枚举

tv6aics1  于 2022-12-19  发布在  TypeScript
关注(0)|答案(3)|浏览(160)

我在types.ts中定义了一个枚举:

export enum Handedness {
  Left,
  Right,
  Both,
}

export type State = {
  count: number
  handedness: Handedness
}

我在state.ts中初始化了一个对象:

import { State, Handedness } from './types'

export const initial: State = {
  count: 0,
  handedness: Handedness.Both
}

当我运行这个项目的测试(通过jest)时,state.ts生成了一个错误TypeError: Cannot read property 'Both' of undefined,告诉我Handedness在被引用的时候没有被定义,但是我从它的模块中导出它,并且在使用它之前导入它...所以它应该被定义。
我发现其他类似的问题都是关于未定义枚举的,但是它们似乎都是关于运行时的,就我所知,这是一个编译时的问题。
我看不出我在这里做错了什么。我在其他地方导入其他类型没有问题。但是这个枚举根本不想工作。这里发生了什么?我该如何解决它?

8hhllhi2

8hhllhi21#

好吧,这不是一个让它工作的方法,但是this GitHub PR解释了ts-jest不支持这样工作的枚举。我已经把所有的用法都改成了(例如)("both" as Handedness),它工作了。所以,这不是一个解释,这是一个变通方案。

f3temu5u

f3temu5u2#

您也可以尝试使用const枚举。
所以改变:

export enum Whatever { ... }

export const enum Whatever { ... }

显然,从ts-jest版本23. 10开始,你就可以这样做了。好多了!

gblwokeq

gblwokeq3#

我在使用Jest运行代码时遇到了类似的错误。该问题是由React组件导致的,该组件从一个模块导入了枚举类型,该模块也被jest.mock模拟。我通过使用jest.spyOn处理我需要的方法而不是整个模块来修复该问题。
发件人:jest.mock("example/path", () => ({ useExampleMethod: () => {...
至:import * as exampleModule from "example/path"; jest.spyOn(exampleModule , 'useExampleMethod').mockReturnValue({...

相关问题