Closed
Description
See the example from this PR to Facebook's Flux:
type Action =
{
type: 'foo',
foo: number,
} |
{
type: 'bar',
bar: string,
};
var FooDispatcher: Dispatcher<Action> = new Dispatcher();
function acceptsNumber(x: number): void {}
FooDispatcher.register(function(action: Action) {
switch (action.type) {
case 'foo':
acceptsNumber(action.foo);
acceptsNumber(action.bar); // flow error, property not found in object
break;
case 'bar':
acceptsNumber(action.bar); // flow error, string incompatible with number
break;
}
});
type NotAction = string;
FooDispatcher.register(function(action: NotAction) {}); // flow error
// flow error
FooDispatcher.dispatch({
type: 'foo-typo',
foo: 100,
});
Now that #254 is merged (into 1.0 branch), I encourage you to help me figure out how to have the same awesomeness in Redux. We probably need to make createStore
definition generic so that you can say createStore<MyState, MyAction>(reducer, initialState)
and have your whole reducer tree type checked.
I'm a Flow noob so any help is welcome. You can start by copying the Counter example, annotating it with Flow and trying to make it type check like in facebookarchive/flux#243.