TypeScript 5.9.3 へのアップグレードと未使用インポートの整理
WebAwesome が TypeScript を 5.7.2 から 5.9.3 に更新し、新バージョンの厳格化された型チェックによって検出された警告・エラーを修正しました。変更の大部分はテストファイル内の未使用インポートの削除と型定義の精密化です。
背景
TypeScript のバージョンを固定したまま運用を続けることで、型チェックの精度向上やエコシステムの恩恵を受けられなくなる問題が蓄積されていました。Issue #1982 では、バージョンが古いままであることがユーザーにも影響を与えているとして、アップグレードの必要性が追跡されていました。
PR の説明にある通り、TypeScript 6 がリリース済みであることを認識しつつも、今回は 5.9.3 への段階的なアップグレードが選択されています。
技術的な変更
バージョン指定を ^5.7.2 から ^5.9.3 に更新し、実際のインストールバージョンも 5.8.3 から 5.9.3 に移行しました。変更は package.json と package-lock.json の両方に反映されています。
package.json の変更:
- "typescript": "^5.7.2",
+ "typescript": "^5.9.3",
TypeScript バージョンアップに伴う型チェックの強化により、複数のテストファイルで未使用インポートが警告として検出されました。対応として、以下のファイルから未使用のインポートが削除されています:
-
button.test.ts—expectEvent、clickOnElementを削除 -
comparison.test.ts—sinonを削除 -
dialog.test.ts—waitUntil、sinonを削除 -
drawer.test.ts—waitUntil、sinonを削除 -
dropdown.test.ts—clickOnElementを削除 -
input.test.ts—clickOnElementを削除 -
slider.test.ts—sinonを削除 -
switch.test.ts—clickOnElementを削除 -
tab.test.ts—aTimeoutを削除 -
textarea.test.ts—aTimeout、expectEventを削除 -
tooltip.test.ts—moveMouseOnElementを削除 -
tree.test.ts—aTimeout、waitUntilを削除
型定義の精密化も行われています。include.test.ts では、bytes プロパティのモックに使用する型が変更されました。
変更前:
bytes: sinon.fake() as unknown as () => Promise<Uint8Array>,
変更後:
bytes: sinon.fake() as unknown as () => Promise<Uint8Array<ArrayBuffer>>,
TypeScript のバージョンアップに伴う型チェックの厳格化に対応するため、Uint8Array に対して明示的に ArrayBuffer 型パラメータを指定する形に修正されています。
また、webawesome-element.test.ts では eslint-disable コメントによる抑制が @ts-ignore への置き換えによって整理されました。
変更前:
/* eslint-disable */
const WebAwesomeElement = Object.getPrototypeOf(WaButton);
/* eslint-enable */
変更後:
// @ts-ignore intentionally unused — verifies prototype chain exists in the bundle
const WebAwesomeElement = Object.getPrototypeOf(WaButton);
コメントには「意図的に未使用 — バンドル内のプロトタイプチェーンの存在を検証するため」と明記されており、将来の開発者が誤って削除しないよう意図が保存されています。
設計判断
今回の変更には、影響範囲を考慮したバージョン選択や、コードの保守性を高めるための判断が含まれています。
TypeScript 6 が存在する中で 5.9.3 を選択した点は、段階的なアップグレード戦略の表れです。メジャーバージョンを一度に跨ぐのではなく、マイナーバージョンの最新まで追い付いた後に次のステップを検討する進め方は、型エラーの影響範囲を制御しやすくします。
eslint-disable から @ts-ignore への変更は、抑制の意図を型チェックツールの文脈に統一する判断です。ESLint による静的解析の抑制よりも、TypeScript コンパイラレベルでの抑制の方がこのケースでは適切であり、さらにインラインコメントで理由を明記することで保守性を高めています。
まとめ
この変更は TypeScript 5.9.3 への移行を通じて、型安全性の向上と未使用コードの除去を同時に達成しています。テストコードの整理は直接的なプロダクト機能には影響しないものの、コードベースの健全性を保ち、より厳格な型チェックの恩恵を受ける基盤が整いました。