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
是迄今为止我听到的最好的名称。谢谢