VS Codeのエージェントモードを拡張するには、を試してください!

TypeScript のコンパイル

TypeScript は、プレーンな JavaScript にトランスパイルされる、型付けされた JavaScript のスーパーセットです。堅牢なコンポーネントを構築するのに役立つクラス、モジュール、インターフェイスを提供します。

TypeScript コンパイラのインストール

Visual Studio Code には TypeScript 言語サポートが含まれていますが、TypeScript コンパイラ tsc は含まれていません。TypeScript ソースコードを JavaScript にトランスパイルする (tsc HelloWorld.ts) には、TypeScript コンパイラをグローバルまたはワークスペースにインストールする必要があります。

Node.js パッケージ マネージャーである npm を通じて TypeScript をインストールするのが最も簡単な方法です。npm がインストールされている場合、次のようにして TypeScript をコンピュータにグローバル (-g) にインストールできます。

npm install -g typescript

バージョンまたはヘルプを確認することで、インストールをテストできます。

tsc --version
tsc --help

もう 1 つの選択肢は、プロジェクトに TypeScript コンパイラをローカルにインストールする (npm install --save-dev typescript) ことです。これには、他の TypeScript プロジェクトとの相互作用の可能性を回避できるという利点があります。

コンパイラと言語サービス

VS Code の TypeScript 言語サービスは、インストールされている TypeScript コンパイラとは別のものであることに留意することが重要です。TypeScript ファイルを開くと、言語ステータス バー項目で VS Code の TypeScript のバージョンを確認できます。

TypeScript version displayed in the language status in the Status Bar.

ヒント

ピン アイコンを使用して、TypeScript のバージョンをステータス バーに固定できます。

記事の後半では、VS Code が使用する TypeScript 言語サービスのバージョンを変更する方法について説明します。

tsconfig.json

通常、新しい TypeScript プロジェクトの最初のステップは、tsconfig.json ファイルを追加することです。tsconfig.json ファイルは、コンパイラ オプションや含めるべきファイルなど、TypeScript のプロジェクト設定を定義します。これを行うには、ソースを保存したいフォルダーを開き、tsconfig.json という名前の新しいファイルを追加します。このファイル内では、IntelliSense (⌃Space (Windows, Linux Ctrl+Space)) があなたをサポートします。

tsconfig.json IntelliSense

ES5、CommonJS モジュール、ソース マップのためのシンプルな tsconfig.json は次のようになります。

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "sourceMap": true
  }
}

これで、プロジェクトの一部として .ts ファイルを作成すると、豊富な編集体験と構文検証が提供されます。

TypeScript を JavaScript にトランスパイルする

VS Code は、統合されたタスク ランナーを通じて tsc と統合します。これを使用して .ts ファイルを .js ファイルにトランスパイルできます。VS Code タスクを使用するもう 1 つの利点は、統合されたエラーと警告の検出が[問題] パネルに表示されることです。簡単な TypeScript の Hello World プログラムをトランスパイルする手順を見ていきましょう。

ステップ 1: 簡単な TS ファイルを作成する

空のフォルダーで VS Code を開き、helloworld.ts ファイルを作成し、そのファイルに次のコードを配置します...

let message: string = 'Hello World';
console.log(message);

TypeScript コンパイラ tsc が正しくインストールされ、Hello World プログラムが動作することをテストするには、ターミナルを開き、tsc helloworld.ts と入力します。VS Code 内で直接統合ターミナル (⌃` (Windows, Linux Ctrl+`)) を使用できます。

これで、トランスパイルされた helloworld.js JavaScript ファイルが表示されます。Node.js がインストールされていれば、node helloworld.js と入力して実行できます。

build and run Hello World

ステップ 2: TypeScript のビルドを実行する

グローバルな **[ターミナル]** メニューから **[ビルド タスクの実行]** (⇧⌘B (Windows, Linux Ctrl+Shift+B)) を実行します。前のセクションで tsconfig.json ファイルを作成した場合、次のピッカーが表示されるはずです。

TypeScript Build

[tsc: build] エントリを選択します。これにより、ワークスペースに HelloWorld.jsHelloWorld.js.map ファイルが生成されます。

[tsc: watch] を選択した場合、TypeScript コンパイラは TypeScript ファイルの変更を監視し、変更があるたびにトランスパイラを実行します。

内部的には、TypeScript コンパイラをタスクとして実行しています。使用するコマンドは tsc -p . です。

ステップ 3: TypeScript ビルドをデフォルトにする

**[ビルド タスクの実行]** (⇧⌘B (Windows, Linux Ctrl+Shift+B)) をトリガーしたときに直接実行されるように、TypeScript ビルド タスクをデフォルトのビルド タスクとして定義することもできます。そのためには、グローバルな **[ターミナル]** メニューから **[既定のビルド タスクの構成]** を選択します。これにより、利用可能なビルド タスクのピッカーが表示されます。TypeScript の **[tsc: build]** を選択すると、.vscode フォルダー内に次の tasks.json ファイルが生成されます。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "typescript",
            "tsconfig": "tsconfig.json",
            "problemMatcher": [
                "$tsc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

このタスクには、タスクの kindbuild に設定し、それをデフォルトにする group JSON オブジェクトがあることに注意してください。これで、**[ビルド タスクの実行]** コマンドを選択するか、(⇧⌘B (Windows, Linux Ctrl+Shift+B)) を押すと、タスクを選択するプロンプトが表示されずにコンパイルが開始されます。

ヒント: VS Code の実行/デバッグ機能を使用してプログラムを実行することもできます。VS Code での Node.js アプリケーションの実行とデバッグに関する詳細は、Node.js チュートリアルにあります。

ステップ 4: ビルドの問題を確認する

VS Code のタスク システムは、問題マッチャーを通じてビルドの問題を検出することもできます。問題マッチャーは、特定のビルド ツールに基づいてビルド出力を解析し、統合された問題の表示とナビゲーションを提供します。VS Code には多くの問題マッチャーが付属しており、上記の tasks.json で見られる $tsc は TypeScript コンパイラ出力用の問題マッチャーです。

例として、TypeScript ファイルに簡単なエラー (console.log に余分な 'g') があった場合、tsc から次のような出力が得られるかもしれません。

HelloWorld.ts(3,17): error TS2339: Property 'logg' does not exist on type 'Console'.

これはターミナル パネル (⌃` (Windows, Linux Ctrl+`)) に表示され、ターミナル ビューのドロップダウンで **[Tasks - build tsconfig.json]** を選択します。

ステータス バーでエラーと警告の数を確認できます。エラーと警告のアイコンをクリックすると、問題のリストが表示され、それらに移動できます。

Error in Status Bar

キーボードを使用してリストを開くこともできます: ⇧⌘M (Windows, Linux Ctrl+Shift+M)

ヒント: タスクは多くのアクションに対して豊富なサポートを提供します。それらを構成する方法の詳細については、タスクのトピックを確認してください。

JavaScript ソース マップのサポート

TypeScript のデバッグは、JavaScript のソース マップをサポートしています。TypeScript ファイルのソース マップを生成するには、--sourcemap オプションでコンパイルするか、tsconfig.json ファイルの sourceMap プロパティを true に設定します。

インライン ソース マップ (コンテンツが別のファイルではなくデータ URL として保存されるソース マップ) もサポートされていますが、インライン ソースはまだサポートされていません。

生成されたファイルの出力場所

生成された JavaScript ファイルを TypeScript ソースと同じフォルダーに置くと、大規模なプロジェクトではすぐに散らかってしまいます。outDir 属性を使用して、コンパイラの出力ディレクトリを指定できます。

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "outDir": "out"
  }
}

派生した JavaScript ファイルを非表示にする

TypeScript で作業しているとき、生成された JavaScript ファイルをファイル エクスプローラーや検索結果で見たくないことがよくあります。VS Code は files.exclude ワークスペース設定でフィルタリング機能を提供しており、これらの派生ファイルを非表示にする式を簡単に作成できます。

**/*.js: { "when": "$(basename).ts" }

このパターンは任意の JavaScript ファイル (**/*.js) に一致しますが、同じ名前の兄弟 TypeScript ファイルが存在する場合に限ります。ファイル エクスプローラーは、JavaScript が同じ場所にコンパイルされている場合、派生リソースを表示しなくなります。

Hiding derived resources Hiding derived resources

ワークスペースのルートにある .vscode フォルダー内のワークスペース settings.json ファイルにフィルター付きの files.exclude 設定を追加します。コマンド パレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) の **[Preferences: Open Workspace Settings (JSON)]** コマンドでワークスペース settings.json を開くことができます。

.ts.tsx の両方のソース ファイルから生成された JavaScript ファイルを除外するには、この式を使用します。

"files.exclude": {
    "**/*.js": { "when": "$(basename).ts" },
    "**/**.js": { "when": "$(basename).tsx" }
}

これはちょっとしたトリックです。検索のグロブ パターンがキーとして使用されます。上記の設定では、2 つの異なるグロブ パターンを使用して 2 つの一意のキーを提供していますが、検索は依然として同じファイルに一致します。

新しい TypeScript バージョンの使用

VS Code には TypeScript 言語サービスの最新の安定バージョンが同梱されており、デフォルトでこれを使用してワークスペースで IntelliSense を提供します。ワークスペース バージョンの TypeScript は、*.ts ファイルをコンパイルするために使用する TypeScript のバージョンとは独立しています。ほとんどの一般的なケースでは、VS Code の組み込み TypeScript バージョンを IntelliSense に使用するだけで心配ありませんが、VS Code が IntelliSense に使用する TypeScript のバージョンを変更する必要がある場合もあります。

これを行う理由には以下が含まれます:

  • TypeScript のナイトリー ビルド (typescript@next) に切り替えて、最新の TypeScript 機能を試す。
  • IntelliSense に使用する TypeScript のバージョンと、コードのコンパイルに使用するバージョンが同じであることを確認する。

アクティブな TypeScript のバージョンとそのインストール場所は、TypeScript ファイルを表示しているときに言語ステータス バーからバージョン番号をピン留めすると、ステータス バーに表示できます。

TypeScript status bar version

ワークスペースのデフォルトの TypeScript バージョンを変更したい場合、いくつかの選択肢があります。

ワークスペースバージョンの TypeScript を使用する

ワークスペースに特定の TypeScript バージョンがある場合、TypeScript または JavaScript ファイルを開き、ステータス バーの TypeScript バージョン番号をクリックすることで、ワークスペース バージョンの TypeScript と VS Code がデフォルトで使用するバージョンを切り替えることができます。VS Code がどのバージョンの TypeScript を使用すべきかを尋ねるメッセージ ボックスが表示されます。

TypeScript version selector

これを使用して、VS Code に付属の TypeScript バージョンとワークスペースの TypeScript バージョンを切り替えます。**[TypeScript: Select TypeScript Version]** コマンドで TypeScript バージョン セレクターをトリガーすることもできます。

VS Code は、ワークスペースのルートにある node_modules 以下にインストールされているワークスペース バージョンの TypeScript を自動的に検出します。ユーザーまたはワークスペースの設定typescript.tsdk を構成することで、VS Code にどのバージョンの TypeScript を使用するかを明示的に伝えることもできます。typescript.tsdk 設定は、TypeScript の tsserver.js ファイルを含むディレクトリを指している必要があります。TypeScript のインストール場所は npm list -g typescript を使用して見つけることができます。tsserver.js ファイルは通常 lib フォルダーにあります。

{
  "typescript.tsdk": "/usr/local/lib/node_modules/typescript/lib"
}

ヒント: 特定の TypeScript バージョンを取得するには、npm install 中に @version を指定します。例えば、TypeScript 3.6.0 の場合は npm install --save-dev typescript@3.6.0 を使用します。TypeScript の次のバージョンをプレビューするには、npm install --save-dev typescript@next を実行します。

これらの例では typescript.tsdktypescript 内の lib ディレクトリを指していますが、typescript ディレクトリは TypeScript の package.json ファイルを含む完全な TypeScript インストールでなければならないことに注意してください。

特定のワークスペースで特定のバージョンの TypeScript を使用するように VS Code に指示することもできます。そのためには、tsserver.js ファイルのディレクトリを指す typescript.tsdk ワークスペース設定を追加します。

{
  "typescript.tsdk": "./node_modules/typescript/lib"
}

typescript.tsdk ワークスペース設定は、ワークスペースバージョンの TypeScript が存在することを VS Code に伝えるだけです。実際にワークスペースバージョンを IntelliSense に使用し始めるには、**[TypeScript: Select TypeScript Version]** コマンドを実行し、ワークスペースバージョンを選択する必要があります。

TypeScript ナイトリービルドの使用

VS Code で最新の TypeScript 機能を試す最も簡単な方法は、JavaScript and TypeScript Nightly 拡張機能をインストールすることです。

この拡張機能は、VS Code の組み込み TypeScript バージョンを自動的に最新の TypeScript ナイトリー ビルドに置き換えます。**[TypeScript: Select TypeScript Version]** コマンドで TypeScript バージョンを構成している場合は、必ず VS Code の TypeScript バージョンの使用に戻すようにしてください。

TypeScript と JavaScript の混合プロジェクト

TypeScript と JavaScript が混在するプロジェクトを持つことが可能です。TypeScript プロジェクト内で JavaScript を有効にするには、tsconfig.jsonallowJs プロパティを true に設定します。

ヒント: tsc コンパイラは jsconfig.json ファイルの存在を自動的に検出しません。tscjsconfig.json ファイルを使用させるには –p 引数を使用します。例: tsc -p jsconfig.json

大規模なプロジェクトでの作業

数百または数千の TypeScript ファイルを含むコードベースで作業している場合、VS Code での編集体験とコマンドラインでのコンパイル時間の両方を改善するために実行できるいくつかの手順があります。

tsconfig には関心のあるファイルのみが含まれていることを確認する

プロジェクトの tsconfig.jsoninclude または files を使用して、プロジェクトに含めるべきファイルのみが含まれるようにします。

プロジェクトの tsconfig.json の設定に関する詳細情報

プロジェクト参照を使用してプロジェクトを分割する

ソース コードを単一の大きなプロジェクトとして構成する代わりに、プロジェクト参照を使用して小さなプロジェクトに分割することで、パフォーマンスを向上させることができます。これにより、TypeScript はコードベース全体をロードするのではなく、一度にコードベースのサブセットのみをロードできます。

プロジェクト参照の使用方法とそれらを扱うためのベストプラクティスについては、TypeScript ドキュメントを参照してください。

次のステップ

さらに読む

よくある質問

TypeScript の "Cannot compile external module" エラーを解決するにはどうすればよいですか?

そのエラーが発生した場合は、プロジェクトのルート フォルダーに tsconfig.json ファイルを作成して解決します。tsconfig.json ファイルを使用すると、Visual Studio Code が TypeScript コードをどのようにコンパイルするかを制御できます。詳細については、tsconfig.json の概要を参照してください。

TypeScript プロジェクトをコンパイルしたときと VS Code で表示されるエラーや警告が異なるのはなぜですか?

VS Code には TypeScript 言語サービスの最新の安定バージョンが同梱されており、お使いのコンピューターにグローバルにインストールされている、またはワークスペースにローカルにインストールされている TypeScript のバージョンと一致しない場合があります。そのため、コンパイラの出力とアクティブな TypeScript 言語サービスによって検出されたエラーとの間に違いが見られることがあります。一致する TypeScript バージョンのインストールに関する詳細は、新しい TypeScript バージョンの使用を参照してください。

VS 2022 に同梱されている TypeScript のバージョンを使用できますか?

いいえ、Visual Studio 2019 および 2022 に同梱されている TypeScript 言語サービスは VS Code と互換性がありません。npm から別のバージョンの TypeScript をインストールする必要があります。

一部のエラーが警告として報告されるのはなぜですか?

デフォルトでは、VS Code の TypeScript はコード スタイルの問題をエラーではなく警告として表示します。これは以下に適用されます。

  • 変数が宣言されているが、使用されていない
  • プロパティが宣言されているが、その値が読み取られていない
  • 到達不能なコードが検出された
  • 未使用のラベル
  • switch 文のフォールスルー case
  • すべてのコード パスが値を返すわけではない

これらを警告として扱うことは、TSLint などの他のツールと一致しています。コマンドラインから tsc を実行すると、これらは引き続きエラーとして表示されます。

この動作を無効にするには、ユーザー設定"typescript.reportStyleChecksAsWarnings": false を設定します。