请帮我修复这个编译错误。
您可以在下面看到编译器抱怨第 20 行的Actions对象(为了清楚起见,我在发布之前删除了几行)是 {}:
但在下面您可以在actions.ts中看到Actions是Actions类型的对象,并且它具有请求的属性(这是一个函数):
在基础代码中,您可以在 DefinedTyped Alt定义中看到createActions应该返回Actions类型的对象:
那么为什么 Typescript 会抱怨 Actions 不是 Actions 类型呢?
您正在使用一个名为"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;
这添加了根据您提供的构造函数正确推断所需的泛型类型信息。