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