![](/img/trans.png)
[英]Typescript error: app.ts(18,10): error TS2503: Cannot find namespace 'server'
[英]Getting s TS2503 when trying to use an imported string constant to constrain a typescript type literal
我正在嘗試通過從互聯網上獲取一些示例來學習redux,但是我遇到了TypeScript錯誤,我不知道該如何解決...
我在同一目錄中有兩個文件... constants.ts和types.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.