期間: 2026-09-25 〜 2026-09-30 · PR 30 件(新機能 2 / 変更・修正 21 / その他 7)

新機能

es2026 を target と lib に指定できるように(#64096)

何ができるようになったか

es2026 が有効な target と lib の値として追加された(#63704)。

  • 使い方: "target": "es2026"、"lib": ["es2026"]
  • 追加された lib: lib.es2026.d.ts・lib.es2026.full.d.ts が追加され、lib.es2026.array / collection / error / iterator / json の宣言ファイルがまとめられている(変更ファイルは全部で 560 件)

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

getJSDocCommentsAndTags を TS 6.0 と同じ動作で復活(#64455)

何ができるようになったか

API の getJSDocCommentsAndTags が、TypeScript 6.0 と同じ機能で再び使えるようになった(#64394)。同期版・非同期版の API のテストも追加されている。

⏳ 未リリース · トピック: プログラム的API

変更・修正

API のコールバック式ファイルシステムを改善し、createVirtualFileSystem を削除(#64447)

Before

new API({ fs: createVirtualFileSystem({...}) }) のように、readFile・fileExists・getAccessibleEntries などのコールバックを登録できた。自前のコールバックを渡すときに一部を省略すると、その関数だけ黙って OS のファイルシステムが使われ、readFile は渡したのに fileExists を忘れる、といった食い違いが起きやすかった。

After

createVirtualFileSystem はテスト用ユーティリティに移され、公開 API からは無くなった。コールバック式のファイルシステムでは、すべての関数について実装の指定が必須になった。すべてをコールバックで書く必要はなく、サーバー側の実装を表すシンボルを指定できる(例: readFile だけを上書きし、他は OS のファイルシステムを使う)。

移行が必要

createVirtualFileSystem を使っていた場合は置き換えが必要。PR では、インメモリのファイルシステム全体を渡す用途には、サーバーとの往復が FS 呼び出しごとに発生しない #64115 の仕組みを使うよう案内している。自前のコールバックを渡している場合は、省略していた関数にもサーバー側の実装を表すシンボルなどを指定する。

⏳ 未リリース · トピック: プログラム的API

バインダーが作った Symbol をクライアント側でも SourceFile の持ち物に(#64518)

Before

API が返す Symbol は、バインダーが作ったもの(SourceFile に属するもの)でもスナップショットごとに別のオブジェクトだった。

After

バインダーが作った Symbol はクライアント側の SourceFileCache に保存され、異なるスナップショット間でも参照が同一になる(サーバーや 6.0 と同じ)。キャッシュの再利用が進む。リクエスト・レスポンスの Symbol ID は、ファイルに対して引ける(バインダー由来)か、プロジェクト・スナップショットに対して引ける(transient)かを示すようになった。#64434 の最初の follow-up。

⏳ 未リリース · トピック: プログラム的API

type-only の import 句で getTypeAtLocation がクラッシュする不具合を修正(#64468)

Before

デフォルトの束縛が無い type-only import(import type { U } from "./types"、import type * as types from "./types")の ImportClause に対して getTypeAtLocation を呼ぶと、nil ポインタ参照で API サーバーが panic していた(#64467)。

After

シンボルを持たない import 句を型宣言として扱わないようにし、クラッシュしなくなった。

⏳ 未リリース · トピック: プログラム的API

API の AST 生成でのダイヤモンド継承を修正し、DeclarationBase の extends 漏れを追加(#64503)

Before

AST の生成スクリプト(generate-go-ast.ts)がダイヤモンド継承を正しく扱えず、DeclarationBase の extends が一部抜けていた(#64439 のレビューで指摘)。

After

生成処理を修正し、ast.generated.ts と Go 側の ast_generated.go を再生成した。

⏳ 未リリース · トピック: プログラム的API

Program のオプションを寿命ごとに分割し、古い状態を保持しないように(#64519)

Before

ProgramOptions にデータ・ホスト・ファクトリが混在していたため、プログラムを作り直すときに古い状態を持ち越しやすかった。診断もプログラム間で保持され、古いデータを参照することがあった(#64465)。

After

ProgramOptions を ProgramConfig(引き継げるデータ)・ProgramHosts(プログラムごとのホスト)・ProgramFactories(構築時だけ使う関数)に分け、必要なものだけを引き継ぐ。プログラム間で保持されていた診断も直し、モジュールリゾルバーも引き継げるデータを分けて持つようにした。#64466 を置き換える PR。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

テンプレートリテラル型のサイズに上限を設け、無限に膨らむのを防止(#64194)

Before

再帰的な条件型でチェック型が any になると、文字列が倍々に伸びながら末尾再帰が続き、再帰の上限 1000 回に届く前にメモリが尽きていた(#63271)。JS 版の tsc は RangeError: Invalid string length を投げ、Go 版は文字列長の制限が無いため止まらなかった(45 秒で 9.8 GB)。

After

getTemplateLiteralType が作る型の大きさを制限し、上限を超えると TS2589(Type instantiation is excessively deep and possibly infinite)を報告して errorType を返す。上限はテキストの長さ(5,000 万文字)とプレースホルダー数(10 万)の 2 つ。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

resolveObjectTypeMembers の冪等性を回復し、無限循環するインスタンス化のエラーを改善(#64372)

Before

#20400 以来、クラス・インターフェースの基底型の型引数が、宣言中のクラスの解決途中のメンバーを参照できたため、ゴーストエラーの原因になっていた(#62180)。

After

基底クラスの型引数から、宣言中のクラス・インターフェースのメンバーを先取りして得ることはできなくなった。無限に循環するインスタンス化には、Instantiations of the following types are infinitely circular: 'Model', 'ModelAttributes', 'Exclude'. のように、循環している型を示すエラーを報告する。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

同じオブジェクト型のマップの交差を簡約しないように(Zod などの再帰スキーマ向け)(#64481)

Before

同じオブジェクト型の homomorphic なマップ型どうしの交差にマップ型を適用すると、交差を簡約しようとして対象の型のメンバーを先に解決していた。

After

この場合は簡約しないため、メンバーが先に解決されず、Zod などのライブラリで再帰的なスキーマを作りやすくなった(#64415)。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

never への簡約のチェックを、複数の構成要素で宣言されたプロパティだけに(#64499)

Before

getReducedType は、交差型のプロパティを never に簡約されるかどうか広く調べていた(#64474)。

After

交差の複数の構成要素に宣言があるプロパティだけを調べるよう最適化した(#64476 に着想を得た、より簡単な実装)。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

交差型の never 簡約チェックを安定した順序で行うように(#64521)

Before

#64499 の somePropertyReducesToNever が map を走査していたため、実行ごとに処理の順序が変わり、同じプログラムでも行う作業量が変わっていた(vscode のベンチマークでシンボル数が毎回異なる)。

After

collections.OrderedMap で見つけた順に名前を調べるようにし、結果が毎回同じになった。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

クラスの static ブロック内の未使用ローカル変数を報告(#64485)

Before

クラスの static ブロック内の未使用のローカル変数が報告されていなかった(#64484)。

After

未使用として報告されるようになった(unusedLocalsAndParameters のテストのベースラインにエラーが追加)。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

JS で継承したクラスフィールドへの再代入に TS2565 が出るリグレッションを修正(#64523)

Before

JS ファイルで、継承したクラスフィールドを this.x = … で再代入すると、誤って TS2565 が報告されていた(#64520)。

After

誤ったエラーが出なくなった。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

型の無いモジュールの import で、宣言出力が付け加える診断が不安定だったのを修正(#64479)

Before

型の無いモジュールを import したとき、宣言出力が追加する診断が出たり出なかったりし、クラッシュも報告されていた(#64458 のコメント)。

After

診断が安定するよう修正し、noFlakyDiagnosticsUntypedModule のテストを追加した。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

isolatedDeclarations で this.x = … の代入があるとクラッシュする不具合を修正(#64471)

Before

isolatedDeclarations の宣言出力で、this.x = … の代入を扱うとクラッシュしていた(#64458 のコメントで報告。typescript-go#4513 の影響)。

After

クラッシュしなくなった。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

JSX 属性内の復元された BinaryExpression の出力でクラッシュする不具合を修正(#64470)

Before

JSX 属性の初期化子に複数の要素が並ぶなど、パーサーがエラーから復元して BinaryExpression を作ると、JSX の出力でクラッシュしていた(#64458 のコメント)。

After

パーサーを修正し、クラッシュせずにエラーを報告するようになった(jsx=react / react-jsx のテストを追加)。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

入れ子の rest 束縛を代入先に正しく変換するように(#64422)

Before

入れ子の rest 束縛を含む分割代入を代入先へ変換するとき、正しく変換されていなかった(#64421。export の分割代入や using 宣言で発生)。

After

入れ子の rest 束縛も代入先に変換するよう修正した。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

宣言出力の打ち切り後にキャッシュ済みの型を複製しないように(#63969)

Before

宣言出力で推論された型を書き出すとき、キャッシュのヒットごとに AST の部分木を深く複製していたため、深く共有された構造の型では、長さの上限を超えて TS7056 を報告する段階になってもコピーが指数的に増えていた(#63966)。

After

型を訪れる前に打ち切りの状態を確認し、上限に達した後は省略のプレースホルダーを返す。issue の再現では、tsc --declaration の実行時間が main の 12.32 秒から 1 秒台に短縮された。クイック情報などのベースラインでは、プレースホルダーの位置・形が変わる場合がある。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

export default <式> / export = <式> の宣言マップを修正(#64460)

Before

識別子でない式の export default / export = では、合成される export default _default; にソースマップの範囲が無く、.d.ts.map の mappings が空になっていた(#64433。TypeScript 6.0 では出力されていた)。

After

合成したエクスポート代入に元の文のソースマップ範囲を割り当て、6.0 と同様にマッピングが出力されるようになった。宣言の出力内容自体は変わらない。

⏳ 未リリース · トピック: 型チェッカー・コンパイラ

tspath.GetCommonParents で結果が上書きされる不具合を修正(#64493)

Before

グループに複数の結果があると、共有された配列を append が上書きし、同じディレクトリが 2 回出たり(存在しないパスになったり)、別のディレクトリが抜けたりしていた(#64492)。

After

結果どうしが上書きし合わないよう修正した。

⏳ 未リリース · トピック: ビルドとファイル監視

ファイルシステムのルートに近いプロジェクトでも watch が再ビルドするように(#64366)

Before

/app・/srv/app・/home/user/project のようにパスの要素が 5 未満の場所にあるプロジェクト(Docker の WORKDIR によくある)や、そうした場所から import したファイルは、tsc --watch / tsc -b --watch で何も表示されずに再ビルドされなかった(#64425)。typescript-go#4026 からのリグレッションで、7.0.2 も該当。

After

プロジェクト自身が宣言したディレクトリ(include のワイルドカード、tsconfig のディレクトリ、cwd)とプログラムのファイルは、ルートに近くても監視するようにした。TS_WATCH_DEBUG=1 を付けると、監視できない理由(no watchable ancestor for /app など)を確認できる。

⏳ 未リリース · トピック: ビルドとファイル監視

チェッカーを排他的に取得するように(#64543)

Before

リクエストの連鎖を通してチェッカーを再入的に使い回せるようにしていたため、チェッカーが並行に使われたり管理がおかしくなったりしてクラッシュが起きていた。

After

再入的な再利用をやめ、チェッカーを排他的に取得するようにした。以前に解放されたチェッカーは引き続き再利用する。コードアクション・参照検索・インレイヒントなどを修正(#64513 を置き換え)。

⏳ 未リリース · トピック: 言語サービス

その他

  • VS Code 拡張のローカライズ生成を @vscode/l10n-dev からリポジトリ内のジェネレーターに置き換え、依存 85 個を削減(#64454)⏳ 未リリース
  • 拡張のバージョン更新時に npm の bin を張り直さないように(#64504)⏳ 未リリース
  • ローカライズのオンボーディング用に OneLoc の LCL ファイルを一時的に復元(#64507)⏳ 未リリース
  • CI で Go モジュールを再びキャッシュ(#64514)⏳ 未リリース
  • VSIX の署名を vsce で検証(#64537)⏳ 未リリース
  • npm のグローバルインストールでもパッケージフィードのプロキシを使うように(#64541)⏳ 未リリース
  • 拡張の公開承認ジョブがパイプラインの検証を通るよう修正(#64542)⏳ 未リリース