TypeScript
CLI ツールmicrosoft/TypeScript
TypeScript は JavaScript の型付きスーパーセットであり、クリーンな JavaScript コードにコンパイルされます。
概要
TypeScript は JavaScript にオプションの静的型を追加し、大規模アプリケーション向けのより優れたツールとエラー検出をサポートします。読みやすく標準に基づいた JavaScript にコンパイルされ、あらゆるブラウザ、ホスト、オペレーティングシステム上で動作します。何百万もの開発者によってエンタープライズソフトウェアの構築に使用されています。
README プレビュー
# TypeScript\r\n\r\n\r\n\r\n[](https://github.com/microsoft/TypeScript/actions/workflows/ci.yml)\r\n[](https://www.npmjs.com/package/typescript)\r\n[](https://www.npmjs.com/package/typescript)\r\n[](https://securityscorecards.dev/viewer/?uri=github.com/microsoft/TypeScript)\r\n\r\n\r\n[TypeScript](https://www.typescriptlang.org/) is a language for application-scale JavaScript. TypeScript adds optional types to JavaScript that support tools for large-scale JavaScript applications for any browser, for any host, on any OS. TypeScript compiles to readable, standards-based JavaScript. Try it out at the [playground](https://www.typescriptlang.org/play/), and stay up to date via [our blog](https://blogs.msdn.microsoft.com/typescript) and [Twitter account](https://twitter.com/typescript).\r\n\r\nFind others who are using TypeScript at [our community page](https://www.typescriptlang.org/community/).\r\n\r\n## Installing\r\n\r\nFor the latest stable version:\r\n\r\n```bash\r\nnpm install -D typescript\r\n```\r\n\r\nFor our nightly builds:\r\n\r\n```bash\r\nnpm install -D typescript@next\r\n```\r\n\r\n## Contribute\r\n\r\n**NOTE: Code changes in this repo are now limited to a small category of fixes**:\r\n\r\n * Crashes that were introduced in 5.9 or 6.0 that *also* repro in 7.0 *and* have a portable fix *and* don't incur other behavioral changes\r\n * Security issues\r\n * Language service crashes that substantially impact mainline usage\r\n * Serious regressions from 5.9 (these must *seriously* impact a *large* proportion of users)\r\n\r\nMost bug fixes should be submitted to the [typescript-go](https://github.com/microsoft/TypeScript-go) repository.\r\nFeature additions and behavioral changes are currently on pause until TypeScript 7.0 is completed.\r\n\r\nThere are many ways to [contribute](https://github.com/microsoft/TypeScript/blob/main/CONTRIBUTING.md) to TypeScript.\r\n* [Submit bugs](https://github.com/microsoft/TypeScript/issues) and help us verify fixes as they are
FAQ (5)
トラブル対応node_modules 内の .d.ts ファイルを変更した後に、tsc --incremental がエラーを見逃す(診断情報が古いままになる)のはなぜですか?
これは TypeScript 7.0.2 におけるリグレッションです(6.0.3 では正常に動作していました)。パッケージのモジュール宣言ファイル内の declare global ブロックが変更されても、.tsbuildinfo キャッシュが無効化されないため、インクリメンタルビルドが古い診断情報を保持し続けます。インクリメンタル実行ではエラーが報告されませんが、クリーンビルドではエラー(例:TS2345)が報告されます。
修正方法と回避策:
1. TypeScript 7.1 以降にアップグレードしてください — このバグは 7.1 nightly で修正が確認されています(npm i typescript@next)。
2. 7.0.x を使い続ける必要がある場合は、実行のたびにビルド情報ファイルを削除して完全な再チェックを強制してください:rm -f <path>.tsbuildinfo && tsc --noEmit --incremental --tsBuildInfoFile <path>.tsbuildinfo -p tsconfig.json。
3. または、クリーンな非インクリメンタル実行で型を検証してください:tsc --noEmit -p tsconfig.json。
注意:この問題は、node_modules 内のパッケージによるグローバル型拡張に対して tsc --noEmit --incremental を実行する型テストのセットアップ(例:Vitest/expect-webdriverio)でよく発生します。
トラブル対応TypeScript 7.0.2 のインクリメンタルビルドで、グローバル宣言ファイルが変更されたときに古い .d.ts ファイルが出力されるのはなぜですか?
これは TypeScript 7.0.2 の既知のバグです。isolatedModules + declaration + incremental を有効にしている環境で、グローバルスコープのファイル(例:declare global や @types/node)がソースファイルと同じビルド実行内で変更されると、依存ファイルの .d.ts が再出力されず、.tsbuildinfo にはそれらが最新であると誤って記録されるため、古い出力がビルドをまたいで残り続けます。
この修正(microsoft/typescript-go#4665)は 7.0.x にはバックポートされません。チームは重要なセキュリティ/安定性に関する修正のみをバックポートする方針だからです。解決策は以下の通りです:
1. TypeScript 7.1(またはナイトリービルド typescript@7.1.0-dev.20261011.1 以降)にアップグレードする:npm install typescript@next。
2. 7.0.2 での回避策:依存関係のバージョンアップや編集でグローバル宣言に変更が加わった場合は、そのたびに .tsbuildinfo ファイルを削除する(またはクリーンビルドを実行する)。これにより、すべての宣言ファイルの完全な再出力が強制されます。
トラブル対応TypeScript 7.0 native (tsgo) において、`as` でリマップされたマッピング型を `Exclude<keyof T & string, ...>` でインデックス指定した際に発生する TS2536 エラーの修正方法
これはネイティブ TypeScript 7.0.2 コンパイラ(tsgo)におけるリグレッションです。同じコードは TS 5.9.3 および 6.0.3 では問題なくコンパイルできます。回避策:Exclude で再マッピング後のキーセットを再計算する代わりに、マップ型をそれ自身の keyof でインデックスします。マップ型をエイリアスに切り出し、Map<T>[keyof Map<T>] を使用してください:
type EntryPathMap<T> = {
[K in keyof T & string as K extends '_key' ? never : K]: [PathTuples<T[K]>] extends [never]
? never
: readonly [K, ...ChildPaths<T[K]>];
};
type PathTuples<T> = T extends object ? EntryPathMap<T>[keyof EntryPathMap<T>] : [];
keyof EntryPathMap<T> は Exclude<keyof T & string, '_key'> と同じキーセットに解決され、すべてのコンパイラで受け入れられます。あるいは、ネイティブコンパイラのリグレッションが修正されるまで、TypeScript を 5.9.3 または 6.0.3(@typescript/typescript6)に固定してください。
トラブル対応なぜ tsgo(TypeScript ネイティブ LSP サーバー)はシャットダウン時に 'panic: assignment to entry in nil map' でクラッシュするのですか?
これは typescript-go の LSP ファイルウォッチャー(lspwatcher.WatchFiles)におけるレースコンディション(競合状態)です。ウォッチャーはサブスクリプションをインストールする間にロックを解放しますが、その隙間に Watcher.Close が実行されると w.watches = nil が設定され、続くマップへの代入がパニックを引き起こします。これは通常、バックグラウンドでのプロジェクトスナップショット更新がウォッチを再登録している最中に、クライアントがドキュメントを閉じてシャットダウンした場合に発生します。つまり、クライアントが動的な workspace/didChangeWatchedFiles 登録をアドバタイズせず、サーバーが内部ウォッチャーを使用している場合です。tsgo --lsp --stdio はステータス 2 で終了します。
**修正:** TypeScript native preview(typescript@7.x / tsgo)を、microsoft/typescript-go#4845 の修正を含むビルドに更新してください。この修正では、サブスクリプションを公開する前にロックを保持した状態で closed を再確認し、パニックする代わりに lspwatcher: closed エラーを返します。
**アップグレードできるまでの回避策:**
1. LSP クライアントが動的なファイルウォッチ登録(workspace.didChangeWatchedFiles.dynamicRegistration: true)をアドバタイズするようにします。これにより、サーバーは競合を含む内部ウォッチャーではなく、クライアント管理のウォッチャーを使用するようになります。
2. ソースからビルドする場合は、internal/lsp/lspwatcher/lspwatcher.go(WatchFiles)にパッチを適用してください。w.mu を再取得した後に w.closed を再確認し、クローズされている場合は未公開のサブスクリプションをクローズして、既存の lspwatcher: closed エラーを返します。パニックを抑制したり、ウォッチャーを無効化したりしないでください。
トラブル対応TypeScript 5.0のデコレーターで「Cannot find name 'ClassMethodDecoratorFunction'」エラーを修正する方法
これは TypeScript 5.0.4 の lib.decorators.d.ts におけるドキュメントのバグです。この例では ClassMethodDecoratorFunction が参照されていますが、その型は lib ファイルに一度も同梱されたことがありません(この例には無効な関数構文も含まれています)。回避策:プロジェクト内で自分でこの型を宣言してください:
type ClassMethodDecoratorFunction<
This = unknown,
Value extends (this: This, ...args: any[]) => any = (this: This, ...args: any[]) => any
> = (
value: Value,
context: ClassMethodDecoratorContext<This, Value>
) => Value | void;
これでバインドメソッドの例が動作します:
const bound: ClassMethodDecoratorFunction = function (value, context) {
if (context.private) throw new TypeError("Not supported on private methods.");
context.addInitializer(function (this: any) {
this[context.name] = this[context.name].bind(this);
});
};
注意点:通常の function 式を使用してください(公式の例にある省略記法は無効な構文です)。また、this[context.name] での暗黙的な any エラーを回避するために、this を any にキャストしてください(またはマップドアクセスを使用してください)。lib.decorators.d.ts 内の誤った例は 5.0.x 以降で修正されているため、新しいバージョンの TypeScript へのアップグレードも推奨されます。既成の型はコミュニティの ajvincent/es-membrane(ClassMethodDecoratorFunction.d.mts)で入手できます。