我从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。
答案 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;
}
}