我正在使用打字稿,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
方法可能返回的类型。
感谢。
答案 0 :(得分:1)
tl; dr 结果类型typeof SomeObject[keyof typeof SomeObject]
将是SomeObject
的{{1}}个值类型。在您的示例Partial<ActionCreator<"TestAction", string>>
中。它基本上是所有现有行动的清单。
以下是对步骤的解释:
typeof ActionCreators
:告诉TS使用const keyof (1)
:会为ActionCreators
的所有键提供联合类型。在您的情况下,它只有一个:TestAction
typeof ActionCreators[(2)]
会为您提供所有密钥的值。它或多或少是&#34;迭代&#34;在对象和&#34;返回&#34;它的价值类型。您使用的是哪个版本的TypeScript?删除Partial
(使用TS 2.6.2)时,我没有收到错误。