期間: 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)⏳ 未リリース