typescript - TS2339 : Property does not exist on type {}

标签 typescript flux alt.js

请帮我解决这个编译错误。

下面您可以看到编译器提示第 20 行的 Actions 对象(为清楚起见,我在发布之前删除了几行)是 {}: enter image description here

但是你可以在下面的 actions.ts 中看到 Actions 是一个 Actions 类型的对象,并且它具有请求的属性(是一个函数): enter image description here

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

那么为什么 Typescript 会提示 Actions 不是 Actions 类型呢?

最佳答案

您正在使用一个名为 "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;

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

关于typescript - TS2339 : Property does not exist on type {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34179728/

相关文章:

c# - 状态存储在 fluxor 中的什么位置?

javascript - 仅当另一个函数在 React 中运行完成时才调用一个函数

testing - 为测试目的设置 JS Alt Store 状态

javascript - React + Flux - 在多页面上卸载页面

Angular 2 : HammerJS swipe for md-tab-group

javascript - Typescript:如何在 Redux 中输入 Dispatch

javascript - 嵌套字典到字符串列表 - typeScript

javascript - 如何使用 alt.js 中的源成功请求后更新状态?

angular - 我是否需要在组件中每次 onDestroy 时取消订阅?