1

我对 MobX 注释有一个奇怪的问题,@action结果对象上不存在带注释的方法。

如果我的类源是以下 TypeScript(作为最小示例):

export class Car {
    @observable
    public wheels: number = 4;

    @action
    public selfDestruct() {
        this.wheels = 0;
    }
}

我调用该方法如下:

const car = new Car();
car.selfDestruct();

我收到一个错误:

Uncaught TypeError: car.selfDestruct is not a function

car.selfDestruct()在控制台中评估返回undefined.

但是,如果我使用动作功能一切似乎都很好:

export class Car {
    @observable
    public wheels: number = 4;

    public selfDestruct = action(
        () => this.wheels = 0
    );
}

const car = new Car();

car.selfDestruct(); // works fine

作为参考,我使用 MobX 5.5.2 和 TypeScript 3.1.1。编译由 ParcelJS 1.10.1 处理

4

2 回答 2

0

public从函数声明中删除是否selfDestruct修复它?我从来没有public在我的动作中使用过,所以我不确定这将如何影响@action装饰器的使用。

于 2018-10-28T03:06:56.203 回答
0

原因原来是我们的 tsconfig 设置——我们有一个根配置和几个子配置,它们之间的编译器选项的相互作用似乎以某种方式破坏了输出。

问题的完整详细信息记录在此处的 MobX GitHub 问题中。我们的解决方法是只为我们的整个项目使用一个统一的 tsconfig。

于 2018-11-08T21:39:29.203 回答