У меня странная проблема с аннотациями 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.






Устраняет ли это удаление public из объявления функции selfDestruct? Я никогда не использовал public в своих действиях, поэтому я не уверен, как это повлияет на использование декоратора @action.
Причина оказалась в нашей настройке tsconfig - у нас была корневая конфигурация и несколько дочерних конфигураций, и казалось, что взаимодействие параметров компилятора между ними каким-то образом искажало вывод.
Полная информация о проблеме задокументирована в выпуске MobX GitHub здесь. Мы решили просто использовать один единый tsconfig для всего проекта.
К сожалению нет. По-прежнему та же проблема.