Procedure
型チェックを実行してエラー箇所を特定する
npx tsc --noEmit 2>&1 | head -40エラーメッセージで衝突プロパティ名を確認する
- 例:
Property 'state' in type 'Bot' is not assignable to the same property in base type 'GameObject' - Phaser の
GameObjectが持つ既存プロパティ:state,name,type,data,active,visible
- 例:
衝突しているプロパティを一括リネームする(例:
state→mode)sed -i '' 's/this\.state/this.mode/g; s/private state: State/private mode: State/g' src/entities/Bot.ts複数ファイルにわたる場合:
find src -name "*.ts" | xargs sed -i '' 's/\bstate: BotState\b/mode: BotState/g; s/this\.state\b/this.mode/g'再度型チェックして解消を確認する
npx tsc --noEmit 2>&1 | head -20
Pitfalls
sedのパターンは厳密に書く。this.stateを置換すると Phaser が内部で使う.stateまで壊れる恐れがあるため、クラス内のthis.stateのみ対象にするprivate stateの宣言行とthis.stateの参照行を別パターンで置換することnameは特に衝突しやすい。Sprite等でも継承されているためbotNameのように prefix を付けるのが安全
Verification
npx tsc --noEmit 2>&1 | grep -c "error TS"
# → 0 であれば解消