Phaser + TypeScript 严格模式

Phaser + TypeScript strict mode

我开始使用 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)
    }
  }
}

因此,建议创建一个可为 null 的 player 成员,然后为其分配值。这是 TypeScript 的严格模式显示错误的地方:Object is possibly 'null'.

我必须处理这种情况的最佳想法是使用像 Maybe 这样的单子。但在这一点上,这对我来说似乎有点矫枉过正。所以我想知道,是否还有其他使用 Phaser 的模式或方法,这将允许我在不使用 monad 的情况下启用严格模式。

我认为最好的选择就是像

这样的地图类型
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;
  }
}

playground