【发布时间】:2018-10-31 03:55:48
【问题描述】:
我正在尝试弄清楚如何使用 Flow 为 Redux 实现类型注释。
使用 TypeScript:
const PLAY = 'PLAY';
const RUN = 'RUN';
class PlayAction {
readonly type = PLAY;
constructor(public payload: string) {}
}
class RunAction {
readonly type = RUN;
constructor(public payload: boolean) {}
}
type Actions = PlayAction | RunAction;
function dummyReducer(state: any, action: Actions) {
switch(action.type) {
case PLAY: {
const typeTest = action.payload; // type: string
break;
}
case RUN: {
const typetest = action.payload; // type: boolean
break;
}
}
}
在流程文档中,我找到了这个例子:Redux with Flow。
// @flow
type State = { +value: boolean };
type FooAction = { type: "FOO", foo: boolean };
type BarAction = { type: "BAR", bar: boolean };
type Action = FooAction | BarAction;
function reducer(state: State, action: Action): State {
switch (action.type) {
case "FOO": return { ...state, value: action.foo };
case "BAR": return { ...state, value: action.bar };
default:
(action: empty);
return state;
}
}
Flow 方法的大问题:
1) 在 2 处使用字符串,因此对于错过拼写错误是不好的做法。
2) 每次我想更改动作类型值时,都无法在 2 个地方更改字符串。
如何使用 Flow 解决这个问题?有什么想法吗?
【问题讨论】:
-
第一个示例中定义的
.type成员在哪里? -
还是不明白你的问题吗?
-
readonly PLAY = PLAY;真的吗? -
@LidorAvitan 您的第一个示例(打字稿)无法编译:
type成员未在任何地方声明。
标签: javascript typescript redux flowtype