🚀 VS Code で で入手しましょう!

TypeScript のコンパイル

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

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

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

TypeScript をインストールする最も簡単な方法は、Node.js Package Manager である npm を使用することです。npm がインストールされている場合は、コンピューターに TypeScript をグローバル (-g) にインストールできます。

npm install -g typescript

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

tsc --version
tsc --help

別のオプションは、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: ビルド] エントリを選択します。これにより、ワークスペースに HelloWorld.js ファイルと HelloWorld.js.map ファイルが生成されます。

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

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

ステップ 3: TypeScript ビルドを既定にする

TypeScript ビルドタスクを既定のビルドタスクとして定義して、[ビルドタスクの実行] (⇧⌘B (Windows、Linux Ctrl+Shift+B)) をトリガーしたときに直接実行されるようにすることもできます。これを行うには、グローバル [ターミナル] メニューから [既定のビルドタスクの構成] を選択します。これにより、使用可能なビルドタスクのピッカーが表示されます。TypeScript [tsc: ビルド] を選択すると、.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 タスクシステムは、問題 matcher を通じてビルドの問題を検出することもできます。問題 matcher は、特定のビルドツールに基づいてビルド出力を解析し、統合された問題の表示とナビゲーションを提供します。VS Code には多くの問題 matcher が付属しており、上記の tasks.json に表示されている $tsc は、TypeScript コンパイラー出力の問題 matcher です。

例として、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)) から [基本設定: ワークスペース設定を開く (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 のバージョンとは独立しています。ほとんどの一般的なケースでは、IntelliSense 用に VS Code の組み込み TypeScript バージョンを心配なく使用できますが、IntelliSense に VS Code が使用する TypeScript のバージョンを変更する必要がある場合があります。

これを行う理由は次のとおりです。

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

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

TypeScript status bar version

ワークスペースの既定の TypeScript バージョンを変更する場合は、いくつかのオプションがあります。

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

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

TypeScript version selector

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

VS Code は、ワークスペースのルートにある node_modules の下にインストールされているワークスペースバージョンの TypeScript を自動的に検出します。ユーザーまたはワークスペースの設定typescript.tsdk を構成することにより、VS Code に使用する TypeScript のバージョンを明示的に指示することもできます。typescript.tsdk 設定は、TypeScript tsserver.js ファイルを含むディレクトリを指している必要があります。npm list -g typescript を使用して 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.tsdk はこれらの例の typescript 内の lib ディレクトリを指していますが、typescript ディレクトリは、TypeScript package.json ファイルを含む完全な TypeScript インストールである必要があることに注意してください。

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

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

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

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

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

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

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

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

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

大規模プロジェクトの操作

数百または数千の TypeScript ファイルを含むコードベースで作業している場合は、VS Code での編集エクスペリエンスとコマンドラインでのコンパイル時間の両方を向上させるために実行できる手順をいくつか示します。

tsconfig に必要なファイルのみが含まれていることを確認する

プロジェクトの tsconfig.jsoninclude または files を使用して、プロジェクトにプロジェクトの一部である必要があるファイルのみが含まれていることを確認します。

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

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

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

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

次のステップ

以下について読み進めてください。

よくある質問

TypeScript の「外部モジュールをコンパイルできません」エラーを解決するにはどうすればよいですか?

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

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

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

VS 2022 に付属しているバージョンの TypeScript を使用できますか?

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

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

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

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

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

ユーザー設定"typescript.reportStyleChecksAsWarnings": false を設定することにより、この動作を無効にすることができます。