Repository navigation
TypeScript: 残っている TypeScript 6(svelte-check と e16c のパーサ)を 7 に移す #35
Copy link
Copy link
Open
Description
現状
型検査そのものは TypeScript 7 に移っている。tsc は @typescript/native(npm:typescript@7.0.2)のもので、npm run typecheck の 4 つの tsconfig はすべて 7 で検査される。typescript 6.0.3 が残っているのは、JS の Compiler API が要る次の 2 か所のためだけ(decisions.md の TypeScript の行)。
1. svelte-check(typecheck:web)
svelte-check --tsgoは TS 7 で検査するが、起動には TS 6 と TS 7 の両方が要る。最新の 4.7.7 でも peer はtypescript: ^5 || ^6のまま。- TS 6 を外すと「TypeScript 7 support currently requires both TypeScript 7 and TypeScript 6 installed」で止まる。
2. e16c のパーサ(ELEC-16 の CODE・GAMES ▸ DEVELOP・gen:elec16)
import ts from 'typescript'はsrc/shared/e16c/front.ts(ts.*32 か所)とsrc/shared/e16c/body.ts(180 か所)の 2 ファイル。使っているのはts.createSourceFile、ts.SyntaxKind、ts.is*の型ガード、ts.getModifiers、ts.tokenToString、ts.NodeFlags、ts.ScriptTarget、それにノードの型。- これを読み込む場所:
- CODE のコンパイル:
src/renderer/widgets/elec16/code/compile.worker.ts(renderer の blob worker。パーサが入るので、worker のバンドルは約 3.7 MB) - PLAY のゲームキットのビルド:
src/shared/elec16/kit/build.ts(同じ worker で動く) - BASIC と PLAY の ROM の生成:
scripts/gen-elec16.mjs(e16c/basic-rom.ts、e16c/play-rom.ts。Node で動く)
- CODE のコンパイル:
- テスト:
tests/unit/e16c-fuzz.test.tsはts.transpileModuleで e16c のプログラムを JS にして TypeScript として走らせる。比べる 5 通りの 1 つ。
TypeScript 7.1 beta で試した結果(2026-10-24)
worktree で typescript と @typescript/native を両方 7.1.0-beta にした(確認だけで、commit はしていない)。
| 項目 | 結果 |
|---|---|
tsc -p で node / e2e / web / e16c |
e16c 以外のエラーは 0。7.1 の型検査の変更(distributive conditional が厳しくなったこと、生成された DOM の型)にはアプリのコードが通る |
svelte-check --tsgo |
起動しない(上の 1) |
| vitest | 5611 件通過。e16c と ELEC-16 関連の 18 ファイルが ts.SyntaxKind が undefined で失敗する |
npm run build |
通る。ただし CODE の worker は実行時に動かない |
7.1 の typescript パッケージの中身:
import ts from 'typescript'(.)はlib/version.cjsで、versionとversionMajorMinorしか返さない。- API は
typescript/sync、typescript/async、typescript/ast、typescript/ast/is、typescript/ast/factoryなどに分かれた。typescript/astのSyntaxKindやis*は純粋な JS で、ブラウザでも動く。 - パースは
API#createSourceFile(typescript/sync)だけで、node:child_processで tsgo のネイティブバイナリを起動し、同期 RPC で呼ぶ。WASM 版は同梱されていない。そのため renderer の worker では使えない。transpileModuleも同じ API を通る。
移行の条件
TS 6(typescript 6.x)を外し、typescript を 7 の 1 つにできるのは、次がすべてそろったとき:
- svelte-check が TS 7 だけで動く(peer に
^7が入り、TS 6 なしで--tsgoか同等の方法が使える)。上流を待つ。 - e16c のパースがブラウザの worker でもできる。次のどれか:
- TypeScript 7 がブラウザで動くパーサ(WASM 版など)を出す。それが出れば、
front.tsとbody.tsをtypescript/astとtypescript/ast/isに書き換える。ノードの形や関数名が 6 と同じかは、そのとき確かめる。 - e16c が別のパーサに移る(TypeScript の構文を読めて、ブラウザで動くもの)。e16c は TypeScript として型検査できることが前提(docs/elec16.md 6 章、
tsconfig.e16c.json)なので、パーサは同じ構文を読めなければならない。大きな書き直しになる。
- TypeScript 7 がブラウザで動くパーサ(WASM 版など)を出す。それが出れば、
- e16c-fuzz の
transpileModuleの代わり。Node のテストなので、typescript/syncのAPI#transpileModuleか、Vite / esbuild の変換に替えられる。 - 移したあと、
gen:elec16の出力(basic.s、rom.json、play-rom.json)がそのままであることを、テストが ROM をソースと照合して確かめる。
1 と 2 の前でもできること:
@typescript/nativeを 7.1 に上げる。上の結果どおり型検査は通る。ただし「ライブラリは最新の release に固定する」規則があるので、RC か正式版を待つ。- TS 7.1 が正式版になったら、svelte-check と、パースの API がブラウザで使えるかを確かめ直す。
関連
- docs/decisions.md の TypeScript の行(7 と 6 を並べて入れた理由)と、依存の最新化の行(2026-10-17、2026-10-23)
- https://devblogs.microsoft.com/typescript/announcing-typescript-7-1-beta/
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
kurouna commentedon Oct 23, 2026
svelte-check の TypeScript 7 対応の状況(2026-10-24 に確認)
移行の条件 1(svelte-check が TS 7 だけで動く)は予定に入っているが、手順の後ろのほうで、時期は決まっていない。
メンテナの予定
sveltejs/language-tools#3111(エディタで TS 7 を使えるようにする PR、open)で、メンテナが次の順番を書いている:
svelte-check --tsgo-experimental-apiを TypeScript 7.1 の安定版 API に合わせる(ほかの作業はこれを待つ)。現状
typescript: ^5 || ^6に固定している。TS 7 をtypescriptとして入れると svelte2tsx が落ちる問題(Typescript 7 crashes svelte2tsx and svelte-check sveltejs/language-tools#3063)への手当てとして、意図して固定したもの。--tsgo-experimental-apiが起動時に落ちる(svelte-check --tsgo-experimental-api crashes on TypeScript 7.1.0-beta: Invalid filesystem callback 'directoryExists' sveltejs/language-tools#3149、Invalid filesystem callback 'directoryExists')。メンテナの手元に修正のブランチがあり、#3111 の後に直す予定。--tsgoが、@typescript/nativeを 7.1 beta にしたときに動くかは確かめていない。--tsgoと--incrementalの細かい不具合は 10 月に入って次々に直されている。見通し
TS 7.1 の正式版が出て、svelte-check がそれに合わせ、さらに svelte2tsx が TS 6 を使わなくなるまでは、TS 6 を外せない。早くても TS 7.1 の正式版より後になる。ブログでは RC が約 1 か月後、正式版はその少し後とされている。
追う issue と PR: sveltejs/language-tools#2733(TypeScript Go 対応の親 issue)、#3111、#3149、#3063。