Свойство класса Typescript, инициализированное в конструкторе и не определенное в функции-члене - PullRequest
0 голосов
/ 16 декабря 2018

Я продолжаю сталкиваться с одной и той же проблемой снова и снова.Я создаю электронное приложение, используя Typescript.У меня есть набор контроллеров для задней части.AppController обладает юрисдикцией в отношении взаимодействия с файловой системой.WindowController обладает юрисдикцией над всеми основными функциональными возможностями окна.Вот упрощенная версия кода:

AppController.ts

export class AppController {

  windowCtrl: WindowController

  constructor() {
    this.windowCtrl = new WindowController(Init Details);

    this.windowCtrl.windowEvents.on('window:get-parent-directory',
    () => {
      console.log('made it here');
    });
  }
}

WindowController.ts

export class WindowController {

  public windowEvents: EventEmitter;

  constructor(Init Details) {
    this.windowEvents = new EventEmitter();
    // this.windowEvents is defined here.
    ipcMain.on('get-parent', getParentDirecotry);
  }

  getParentDirectory() {
    this.windowEvents.emit('window:get-parent-directory');
    // this.windowEvents is undefined here
  }
}

Источник событий windowEvents isобщение между двумя классами с помощью сообщений.Я сделал то же самое с EventEmitters в Angular и прочитал документацию по узлу, чтобы убедиться, что я не допустил глупой ошибки.Я провел немало исследований, но все, что я нашел, это пример того, как люди не инициализировали его в конструкторе.У меня нет выбора, и я не знаю, что мне не хватает.Эта же проблема произошла с экземпляром BrowserWindow от электронов.Я инициализирую его в конструкторе, окно открывается на экране, и когда я пытаюсь вызвать его из функции-члена класса, оно не определено.

Любые идеи?

1 Ответ

0 голосов
/ 17 декабря 2018

Если вы уверены, что ваш код правильный, но что-то undefined без причины, это может быть связано с тем, что вы столкнулись с проблемой циклическая зависимость .

Инструмент, который вы 'При его использовании для создания вашего проекта могут быть обнаружены два модуля, которые - прямо или косвенно - зависят друг от друга.Чтобы разрешить ситуацию, он должен где-то начинаться, но за счет временной маркировки одного модуля как undefined.

Вы можете проверить, так ли это, используя статический анализ.Если вы используете TSLint, правило tslint-no-circular-imports предлагает именно это.Существует также плагин Webpack , который делает то же самое.

...