我在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正在处理该编译
答案 0 :(得分:0)
从public
函数声明中删除selfDestruct
可以解决吗?我从未在操作中使用过public
,所以不确定是否会影响@action
装饰器的使用。
答案 1 :(得分:0)
原来的原因与我们的tsconfig设置有关-我们有一个root配置和几个子配置,而且似乎它们之间的编译器选项相互影响,以某种方式破坏了输出。
该问题的完整详细信息记录在MobX GitHub第here页中。我们的解决方法是仅对整个项目使用一个统一的tsconfig。