Eri*_*vic 5 javascript typescript redux
我正在将应用程序从 JavaScript ES6 转换为 TypeScript,并且可能会混合 JavaScript / TypeScript 很长时间。
我已经成功设置了一个 TypeScript Redux (4.0.0-beta.2) 存储,并使用枚举定义了一些 TypeScript Redux 操作,如下所示:
export enum SignInActionType {
SignedIn = "SIGNED_IN",
SignedOut = "SIGNED_OUT",
}
export interface SignInAction extends Action<SignInActionType> {
}
Run Code Online (Sandbox Code Playgroud)
然后减速器打开这些值
export const signInReducer: Reducer<SignInState, SignInAction> = (state: SignInState = initialState, action: SignInAction) => {
switch (action.type) {
case SignInActionType.SignedIn:
return {...state, state: SignInType.SignedIn};
case SignInActionType.SignedOut:
return {...state, state: SignInType.SignedOut};
}
return state;
};
Run Code Online (Sandbox Code Playgroud)
在附加 Chrome 调试器并进入 reducer 函数后,我可以看到action.typeswitch 语句中是枚举成员的字符串,例如SIGNED_IN.
TypeScript 似乎没有检测到枚举成员名称中的重叠。
例如
export enum ThisIsAMistake {
SignMyGuestBook = "SIGNED_IN",
}
Run Code Online (Sandbox Code Playgroud)
我将面临的问题是,即使消息不是针对该减速器,减速器也可能会运行。
其他一些语言(例如 Java,或者更类似于 TypeScript - Swift)中的枚举的“承诺”是,即使两个枚举成员共享一个名称,它们也不相同。
如果我理解正确,这基本上意味着我可以在编译时获得更多帮助而不会拼写错误,但我仍然需要确保字符串是唯一的?
TL; 博士
小智 1
只需遵循 Redux 使用操作的命名约定(即const ACTION_NAME='ACTION_NAME'在枚举内部。
enum ActionTypes {
FETCH_USERS = 'FETCH_USER'
}
Run Code Online (Sandbox Code Playgroud)
这里的主要思想是,在左侧和右侧我们始终具有相同的名称(即 FETCH_USERS)
如果您尝试执行以下操作 - 您将收到一条错误消息“重复标识符‘FETCH_USERS’”
enum ActionTypes {
FETCH_USERS = 'FETCH_USER'
FETCH_USERS = 'FETCH_SOMETHING_ELSE'
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你 :)
| 归档时间: |
|
| 查看次数: |
1975 次 |
| 最近记录: |