【发布时间】:2018-02-22 15:41:48
【问题描述】:
我正在将应用程序从 JavaScript ES6 转换为 TypeScript,并且可能会在很长一段时间内混合使用 JavaScript / TypeScript。
我已经成功设置了一个 TypeScript Redux (4.0.0-beta.2) 存储并使用枚举定义了一些 TypeScript Redux Actions:
export enum SignInActionType {
SignedIn = "SIGNED_IN",
SignedOut = "SIGNED_OUT",
}
export interface SignInAction extends Action<SignInActionType> {
}
reducer 然后打开这些值
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;
};
在附加 Chrome 调试器并进入 reducer 函数后,我可以看到 switch 语句中的 action.type 是枚举成员的字符串,例如SIGNED_IN.
TypeScript 似乎没有检测到枚举成员名称中的重叠。
例如
export enum ThisIsAMistake {
SignMyGuestBook = "SIGNED_IN",
}
我将面临的问题是,即使消息不是针对该 reducer,reducer 也可能会运行。
在其他一些语言(例如 Java,或更类似于 TypeScript - Swift)中,枚举的“承诺”是即使两个枚举成员共享一个名称,但它们并不相同。
如果我理解正确,这基本上意味着我在不拼写错误的情况下获得了更多的编译时间帮助,但我仍然需要确保字符串是唯一的?
TL;DR
- TypeScript 是否提供了一种表达枚举字符串唯一性的方法?
- TypeScript 世界中是否存在用于此目的的标准方法?
【问题讨论】:
-
在 js 中有
Symbols,但是它们还不能作为枚举值。
标签: javascript typescript redux