網站搜尋

jestjs - 在編譯時未定義的 TypeScript 列舉


我在 types.ts 中定義了一個枚舉(enum):

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 尚未定義。但我已經從其模組中匯出它,並在使用之前匯入它……所以它應該是已定義的。

我發現其他類似的問題都是在問未定義的枚舉,但它們似乎都是在詢問運行時。據我所知,這是一個編譯時問題。

我看不出我在這裡會做錯什麼。我在其他地方匯入其他類型都沒有問題。但這個列舉就是不想工作。這是怎麼回事,我該怎麼解決它呢?

答案#1

嗯,這不是讓這個運作的方法,但這個 GitHub PR 解釋了 ts-jest 不會支持像這樣運作的枚舉。我已經將所有的使用改為(例如)("both" as Handedness),這樣就可以運作了。所以,這不是一個解釋,而是一個變通方法。

答案#2

你也可以嘗試使用 const 列舉。

所以改變:

export enum Whatever { ... }

到

export const enum Whatever { ... }

顯然從 ts-jest 版本 23.10 開始,你就可以這麼做了。好得多!