移相器+ TypeScript严格模式

时间:2019-02-14 13:43:15

标签: typescript phaser-framework strict

我从Phaser.io开始冒险,我想在TypeScript中创建一个项目,该项目可以充分利用其编译器。我的意思是在strict模式下运行TS。优点(对我而言)之一是可空对象带来的额外安全性。这就是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成员,然后分配其值。这是TypeScript的严格模式显示错误的地方:Object is possibly 'null'.

面对这种情况,我最好的办法是使用Maybe之类的monad。但这对我而言似乎太过分了。因此,我想知道,是否还有其他使用Phaser的模式或方法,这将使我能够使用严格的模式,而无需使用monad。

1 个答案:

答案 0 :(得分: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;
  }
}

playground