0

请帮我修复这个编译错误。

您可以在下面看到编译器抱怨第 20 行的Actions对象(为了清楚起见,我在发布之前删除了几行)是 {}: 在此处输入图像描述

但在下面您可以在actions.ts中看到Actions是Actions类型的对象,并且它具有请求的属性(这是一个函数): 在此处输入图像描述

在基础代码中,您可以在 DefinedTyped Alt定义中看到createActions应该返回Actions类型的对象: 在此处输入图像描述

那么为什么 Typescript 会抱怨 Actions 不是 Actions 类型呢?

4

1 回答 1

2

您正在使用一个名为"app/actions/actions". 该模块实际上不是一个模块(属性映射),但无论结果如何flux.createACtions(Actions)

export = flux.createActions(Actions); // in actions.ts

那返回什么?因为您没有指定泛型 for <T>,并且因为 的参数createActions没有正确包含T它可以推断的 a ,所以它假定它T只是{}. 在这里讨论过并最终拒绝了。因此,如前所述,您需要指定泛型:

export = flux.createActions<Actions>(Actions);

但为避免这种情况,您可以将本地(或远程)alt.d.ts更改为:

class Alt {
    createActions<T extends ActionsClass>(con: ActionsClassConstructor<T>, ...): T;
}
type ActionsClassConstructor<T extends ActionsClass> = new (alt:Alt) => T;

这添加了根据您提供的构造函数正确推断所需的泛型类型信息。

于 2015-12-09T20:32:44.033 回答