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