首页 文章

TS2339:类型{}上不存在属性

提问于
浏览
0

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

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

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

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

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

1 回答

  • 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;
    

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

相关问题