Строгий режим Phaser + TypeScript

Я начинаю свое приключение с Phaser.io, и я хотел создать проект на TypeScript, который полностью использовал бы его компилятор. Под этим я подразумеваю запуск TS в режиме strict. Одно из преимуществ (для меня) - дополнительная безопасность от обнуляемого объекта. И вот здесь он не очень хорошо сочетается с Phaser.

Все примеры, которые я видел до сих пор, предполагают использование следующего шаблона:

class MyScene extends Phaser.Scene {
  player: null;

  create() {
    this.player = this.physics.add.image(...)
  }

  update() {
    //...

    if (cursors.left.isDown) {
      this.player.setVelocity(-100)
    }
  }
}

Поэтому рекомендуется создать член player, допускающий значение NULL, а затем присвоить ему значение. Здесь строгий режим TypeScript показывает ошибку: Object is possibly 'null'.

Лучшая идея, которую мне пришлось разобраться в этой ситуации, - использовать монады типа Maybe. Но на данный момент это кажется мне излишним. Поэтому мне интересно, есть ли другие шаблоны или способы использования Phaser, которые позволили бы мне включить строгий режим, не доходя до монад.


person dotintegral    schedule 14.02.2019    source источник
comment
Не могли бы вы показать сообщение об ошибке?   -  person Przemyslaw Jan Beigert    schedule 14.02.2019
comment
@PrzemyslawPietrzak Я обновил сообщение с сообщением об ошибке.   -  person dotintegral    schedule 14.02.2019


Ответы (1)


Думаю, лучшим вариантом будет просто тип карты вроде

class X {
  player: Player | null = null;

  create() {
    this.player = new Player();
  }

  do() {
    (this.player as Player) / 2;
  }
}

Или используйте !, чтобы пропустить первоначальную проверку собственности

class X {
  player!: number;

  create() {
    this.player = 42;
  }

  do() {
    this.player / 2;
  }
}

детская площадка

person Przemyslaw Jan Beigert    schedule 14.02.2019