动作创建者的解释和从中提取类型

时间:2018-02-06 22:50:35

标签: reactjs typescript redux react-redux

我正在使用打字稿,react和redux组合一个小应用程序,我遇到了一个叫做动作创建者的小东西。

动作创建者类的代码如下,原始创建者和道具转到github @ plotrwitek;

export class ActionCreator<T, P> {
  readonly type: T;
  readonly payload: P;

  constructor(type: T) {
    this.type = type;
  }

  create = (payload: P) => ({
    type: this.type,
    payload
  });
}

现在,在reducer中,我实例化这些动作创建器,并提取不同类型如下;

export const ActionCreators = {
  TestAction: new ActionCreator<'TestAction', string>('TestAction'),
};

我使用Partial<...>的原因是因为它会抱怨缺少create属性,该属性存在于类中,但不会归因于{{1方法。

create

我想知道的是以下内容;有人可以请说明export type Action = Partial<typeof ActionCreators[keyof typeof ActionCreators]>; 如何运作,如果可能的话;为此提供了一个替代解决方案,用于解释缺少的typeof ...[keyof typeof ...]属性 - 一种仅包含create方法可能返回的类型。

感谢。

1 个答案:

答案 0 :(得分:1)

tl; dr 结果类型typeof SomeObject[keyof typeof SomeObject]将是SomeObject的{​​{1}}个值类型。在您的示例Partial<ActionCreator<"TestAction", string>>中。它基本上是所有现有行动的清单。

以下是对步骤的解释:

  1. typeof ActionCreators:告诉TS使用const
  2. 的类型
  3. keyof (1):会为ActionCreators的所有键提供联合类型。在您的情况下,它只有一个:TestAction
  4. typeof ActionCreators[(2)]会为您提供所有密钥的值。它或多或少是&#34;迭代&#34;在对象和&#34;返回&#34;它的价值类型。
  5. 您使用的是哪个版本的TypeScript?删除Partial(使用TS 2.6.2)时,我没有收到错误。