Typescript 为什么Redux中间件中的第一个参数的类型是“MiddlewareAPI”而不是“Store”?
在这些示例中,就我多年来使用它而言,我假设第一个函数接受一个存储对象。。。然而,我看到很多人用Typescript 为什么Redux中间件中的第一个参数的类型是“MiddlewareAPI”而不是“Store”?,typescript,redux,Typescript,Redux,在这些示例中,就我多年来使用它而言,我假设第一个函数接受一个存储对象。。。然而,我看到很多人用MiddlewareAPI输入它的例子,事实上redux代码也显示了这一点 为什么中间件会将其键入存储?是不是因为它只是商店的一部分?到底是什么?为什么它不被命名为像StoreHandler这样的东西,而不是像MiddlewareAPI这样的通用东西呢?因为存储的完整定义是{dispatch,getState,subscribe,replaceReducer},中间件不允许订阅或替换reducer。因此
MiddlewareAPI
输入它的例子,事实上redux代码也显示了这一点
为什么中间件会将其键入
存储
?是不是因为它只是商店的一部分?到底是什么?为什么它不被命名为像StoreHandler
这样的东西,而不是像MiddlewareAPI
这样的通用东西呢?因为存储的完整定义是{dispatch,getState,subscribe,replaceReducer}
,中间件不允许订阅或替换reducer。因此,它们被传递一个表示存储API子集的对象:{dispatch,getState}
,而不是存储:
export interface MiddlewareAPI<D extends Dispatch = Dispatch, S = any> {
dispatch: D
getState(): S
}
export interface Middleware<
DispatchExt = {},
S = any,
D extends Dispatch = Dispatch
> {
(api: MiddlewareAPI<D, S>): (
next: Dispatch<AnyAction>
) => (action: any) => any
}
导出接口MiddlewareAPI{
调度:D
getState():S
}
导出接口中间件<
DispatchExt={},
S=任何,
D扩展调度=调度
> {
(api:MiddlewareAPI):(
下一步:调度
)=>(操作:任意)=>任意
}
谢谢马克!那么“为什么它的名称不是像StoreHandler那样的,而不是像MiddlewareAPI那样的通用名称呢?”这显然是一个更开放的说法。A)我没有创建类型的名称-你真的必须问问编写原始TS类型定义的人。B) StoreHandler
听起来一点意义都没有,似乎真的错了。这不是“商店”,也没有“处理”MiddlewareAPI
并不是完全描述性的,但至少它表明它是中间件特有的东西。在编写中间件时,我个人倾向于将变量命名为storeAPI
。storeAPI
是迄今为止我听到的最好的名称。谢谢