簡體   English   中英

嘗試使用導入的字符串常量來約束打字稿類型文字時,獲取TS2503

[英]Getting s TS2503 when trying to use an imported string constant to constrain a typescript type literal

我正在嘗試通過從互聯網上獲取一些示例來學習redux,但是我遇到了TypeScript錯誤,我不知道該如何解決...

我在同一目錄中有兩個文件... constants.tstypes.ts

constants.ts導出包含字符串值的Actions常量:

// constants.ts
export const Actions = {
  ADD: 'ADD',
  TOGGLE: 'TOGGLE',
};

types.ts包含一個ActionType,它將用於在Redux reducer函數中指定參數類型...它使用Actions常量,如下所示:

// types.ts
import { Actions } from "./constants";

export type ActionType = {
  cmd: Actions.ADD | Actions.TOGGLE,
  data: any
};

我正在嘗試定義ActionType.cmd屬性,以便它只能是“ ADD”或“ TOGGLE” ...

如果我直接寫這些值,例如:

cmd: 'ADD' | 'TOGGLE'

一切正常...但是當我嘗試使用在Actions常量中定義的字符串值時,出現TS2503錯誤,提示“找不到命名空間Actions”

這可能嗎,還是我錯過了什么? 請幫忙!

由於已將Actions定義為常量,因此Actions.ADD僅可作為值使用,而不能作為類型使用。 考慮改用枚舉:

export enum Actions {
  ADD = 'ADD',
  TOGGLE = 'TOGGLE',
};

export type ActionType = {
  cmd: Actions,  // short for Actions.ADD | Actions.TOGGLE
  data: any
};

枚舉的成員可以作為值和文字類型使用。

據我了解,您不能直接將Actions.ADD的值用作類型。

您可以使用typeof來獲取值的類型,並可以使用keyof來獲取鍵,因此,如果鍵的名稱和值相同,則可以進行以下操作。

type ActionType = {
  cmd: keyof typeof Actions,
  data: any
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM