MobX:带动作注释的方法未定义

时间:2018-10-26 15:28:31

标签: typescript annotations mobx parceljs

我在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

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

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正在处理该编译

2 个答案:

答案 0 :(得分:0)

public函数声明中删除selfDestruct可以解决吗?我从未在操作中使用过public,所以不确定是否会影响@action装饰器的使用。

答案 1 :(得分:0)

原来的原因与我们的tsconfig设置有关-我们有一个root配置和几个子配置,而且似乎它们之间的编译器选项相互影响,以某种方式破坏了输出。

该问题的完整详细信息记录在MobX GitHub第here页中。我们的解决方法是仅对整个项目使用一个统一的tsconfig。