MobX:动作注解方法未定义
MobX: Action-annotated method is undefined
我在使用 MobX 注释时遇到一个奇怪的问题,结果对象上不存在注释为 @action
的方法。
如果我的 class 来源是以下 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()
returns undefined
。
但是,如果我使用操作函数,一切似乎都很好:
export class Car {
@observable
public wheels: number = 4;
public selfDestruct = action(
() => this.wheels = 0
);
}
const car = new Car();
car.selfDestruct(); // works fine
作为参考,我正在使用带有 TypeScript 3.1.1 的 MobX 5.5.2。编译由 ParcelJS 1.10.1
处理
从 selfDestruct
函数声明中删除 public
是否可以修复它?我从未在我的操作中使用过 public
,所以我不确定这将如何影响 @action
装饰器的使用。
原因原来是我们的 tsconfig 设置 - 我们有一个根配置和几个子配置,它们之间编译器选项的相互作用似乎以某种方式破坏了输出。
问题的完整详细信息记录在 MobX GitHub 问题 here 中。我们的解决方法是对整个项目仅使用一个统一的 tsconfig。
我在使用 MobX 注释时遇到一个奇怪的问题,结果对象上不存在注释为 @action
的方法。
如果我的 class 来源是以下 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()
returns undefined
。
但是,如果我使用操作函数,一切似乎都很好:
export class Car {
@observable
public wheels: number = 4;
public selfDestruct = action(
() => this.wheels = 0
);
}
const car = new Car();
car.selfDestruct(); // works fine
作为参考,我正在使用带有 TypeScript 3.1.1 的 MobX 5.5.2。编译由 ParcelJS 1.10.1
处理从 selfDestruct
函数声明中删除 public
是否可以修复它?我从未在我的操作中使用过 public
,所以我不确定这将如何影响 @action
装饰器的使用。
原因原来是我们的 tsconfig 设置 - 我们有一个根配置和几个子配置,它们之间编译器选项的相互作用似乎以某种方式破坏了输出。
问题的完整详细信息记录在 MobX GitHub 问题 here 中。我们的解决方法是对整个项目仅使用一个统一的 tsconfig。