TS2339:类型{}

时间:2015-12-09 13:12:49

标签: typescript flux alt.js

请帮我修复此编译错误。

下面你可以看到编译器抱怨第20行的操作对象(为了清楚起见,我删除了几行,然后发布){}: enter image description here

但是,您可以在 actions.ts 中看到,操作操作类型的对象,并且它具有所请求的属性(是一个功能): enter image description here

在基本代码中,您可以在DefinitelyTyped Alt 定义中看到 createActions 应该返回操作类型的对象: enter image description here

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

1 个答案:

答案 0 :(得分:1)

您正在使用名为"app/actions/actions"的模块。该模块实际上不是一个模块(属性图),但是flux.createACtions(Actions)的结果是什么:

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

返回什么?因为您没有指定<T>的通用,并且因为createActions的参数没有正确地包含它可以推断的T,所以它假设T只是{}。这是discussed here并最终被拒绝。因此,如上所述,您需要指定泛型:

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;

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