我从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这样的monads。但在这一点上,对我来说,这似乎有点过头了。因此,我想知道,如果有其他模式或使用Phaser的方法,这将允许我在不使用monads的情况下打开严格模式。
发布于 2019-02-14 22:04:39
我认为最好的选择就是像这样的地图类型
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;
}
}https://stackoverflow.com/questions/54691849
复制相似问题