接受减速器的函数的流类型不匹配
flow typing mismatch for function accepting a reducer
我想创建一个对 reducer 做一些事情的函数(它是什么并不重要,只是一些转换,类似于 combineReducers)。当我想为减速器抽象 state
时,我遇到了问题。
这是用于某些组件的简化减速器:
type someState = {
foo: number,
};
export const someSimpleReducer = (state: someState) => state;
type StateAbstract = {}; // this doesn't work
// type StateAbstract = any; // this works
这里是具有抽象状态的抽象转换函数:
declare type SimpleReducer<S> = (state: S) => S;
export const transformReducer = (reducer: SimpleReducer<StateAbstract>) => ({
reducer,
});
transformReducer(someSimpleReducer);
我看到以下流程错误:
Flow: Cannot call transformReducer
with someSimpleReducer
bound to reducer
because property foo
is missing in StateAbstract
[1] but exists in someState
[2] in the first argument
如果我使用 type StateAbstract = any
那么我看不到任何错误...
我如何编写 StateAbstract
类型,使其不是 any
,而是一个对象?
declare type SimpleReducer<S> = (state: S) => S;
声明一个类型SimpleReducer
,它是一个接受 S 和 returns 接受 S 的函数。
transformReducer
是一个接受 SimpleReducer<StateAbstract>
的函数,即接受 StateAbstract
和 returns 一个 StateAbstract
.
的函数
transformReducer
不应该关心 reducer 函数采用什么类型和 returns。不要使用具体类型,而是使用泛型:
export const transformReducer = <S>(reducer: SimpleReducer<S>) => ({reducer})
我想创建一个对 reducer 做一些事情的函数(它是什么并不重要,只是一些转换,类似于 combineReducers)。当我想为减速器抽象 state
时,我遇到了问题。
这是用于某些组件的简化减速器:
type someState = {
foo: number,
};
export const someSimpleReducer = (state: someState) => state;
type StateAbstract = {}; // this doesn't work
// type StateAbstract = any; // this works
这里是具有抽象状态的抽象转换函数:
declare type SimpleReducer<S> = (state: S) => S;
export const transformReducer = (reducer: SimpleReducer<StateAbstract>) => ({
reducer,
});
transformReducer(someSimpleReducer);
我看到以下流程错误:
Flow: Cannot call
transformReducer
withsomeSimpleReducer
bound toreducer
because propertyfoo
is missing inStateAbstract
[1] but exists insomeState
[2] in the first argument
如果我使用 type StateAbstract = any
那么我看不到任何错误...
我如何编写 StateAbstract
类型,使其不是 any
,而是一个对象?
declare type SimpleReducer<S> = (state: S) => S;
声明一个类型SimpleReducer
,它是一个接受 S 和 returns 接受 S 的函数。
transformReducer
是一个接受 SimpleReducer<StateAbstract>
的函数,即接受 StateAbstract
和 returns 一个 StateAbstract
.
transformReducer
不应该关心 reducer 函数采用什么类型和 returns。不要使用具体类型,而是使用泛型:
export const transformReducer = <S>(reducer: SimpleReducer<S>) => ({reducer})