2

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

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

导出类ActionCreator{只读类型:T;只读有效载荷:P;构造函数(类型:T){this.type=类型;}创建=(有效载荷:P)=>({类型:this.type,有效载荷});}

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

导出常量ActionCreators={TestAction:新ActionCreator<“TestAction”,string>(“TestAction'”),};

我使用的原因部分<…>因为它会投诉失踪创造属性,该属性存在于类上,但不存在于从创造方法。

导出类型Action=Partial;

我想知道的是:;有人能解释一下类型。。。[键入…]工程,如果可能;提供一个替代解决方案来解决这个问题创造属性-仅包含创造方法。

谢谢。

1答案1

重置为默认值
1

tl;博士生成的类型SomeObject的类型[SomeObject类型的键]工会属于SomeObject(某个对象)的值类型。在你的例子中部分<ActionCreator<“TestAction”,字符串>>它基本上是所有现有操作的列表。


以下是对步骤的解释:

  1. ActionCreator的类型:告诉TS使用常量的类型
  2. 键(1):将为您提供联合类型的所有键动作创建者在您的情况下,只有一个:测试操作
  3. ActionCreator的类型[(2)]将为您提供所有密钥的值。它或多或少是在对象上“迭代”并“返回”其值类型。

您使用的是哪个版本的TypeScript?删除部分(使用TS 2.6.2)。

6
  • 首先,非常感谢您的解释!我正在使用2.7.1。当我尝试创建一个类似以下的操作时,出现了问题const testAction:Action={type:“testAction”,有效负载:“random string”};。我现在在手机上,但回家后可以更新更多信息。 评论 2018年2月7日12:19
  • 好吧,我现在有一个测试,它导入Actions,并尝试创建如下操作:const-action:action=ActionCreator。TestAction.create('测试值');然后,Typescript会给出此错误:类型'{Type:“TestAction”;payload:string;}'不可分配给类型'ActionCreator<“TestAction',string>'。类型'{type:“TestAction”;负载:string;}'中缺少属性'create'。 评论 2018年2月7日12:41
  • 这有点难读。你能创建一个代码沙盒还是为了测试的目的? 评论 2018年2月7日12:52
  • 当然;代码沙盒.io/s/7zqzrjjv3x。讨论的代码来自存储库github.com/FredrikAugust/typescript-react-boiler模板讨论的文件测试/默认Reducer.test.ts,src/actions/action-creator.tssrc/减速器/ts. 评论 2018年2月7日14:17
  • 我不确定这是否是上述代码的问题,因为codesandbox不会显示任何错误(将鼠标悬停在create上实际上也会显示正确的键入)。我在编辑器中复制/粘贴代码,那里一切都很好。类型推断也有效。我创建了另一个仅接受而不是一串打字成功地警告了我。 评论 2018年2月8日7:02

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.