

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AL2023 での TypeScript
<a name="typescript"></a>

**注記**  
 このドキュメントでは、TypeScript とその Node.js ベースの実行環境に関する重要な情報を提供します。また、一般的な開発ワークフローを紹介し、一貫性と再現性のある開発環境を提供するために TypeScript が AL2023 にどのようにパッケージ化されているかを説明します。

 [https://www.typescriptlang.org/](https://www.typescriptlang.org/) (TS) は、JavaScript (JS) に基づくプログラミング言語であり、JS のすべての機能を提供するとともに、[タイプシステムで拡張](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)されています。一般的なシナリオでは、TS で記述されたプログラムは最初に JS コードに変換され、次に Node.js によって他の通常の JS プログラムと同様に実行されます。TS の専門用語では、この変換プロセスを[「コンパイル」、これを実行するのが「コンパイラ」](https://www.typescriptlang.org/docs/handbook/typescript-tooling-in-5-minutes.html) (*tsc*) と呼ばれています。*tsc* コンパイラ自体は JS で記述されているため、実行するには Node.js などの JS ランタイム環境も必要です。他の JS ランタイム環境とは異なり、Node.js は現在、実験的で軽量な TS のみをサポートしています。タイプチェックを含む完全な TS サポートでは、[typescript](https://www.npmjs.com/package/typescript) などのサードパーティ製パッケージを使用する必要があります。Node.js ランタイム環境の *tsc* (TS コンパイラ) を取得するには、typescript ノードモジュールをインストールするのが一般的です。これを行うには、パッケージマネージャーの 1 つ (通常は *npm*) を使用できます。*npm* を使用して TS コンパイラをインストールするには、グローバルとプロジェクト内の 2 つの方法があります。[正式に推奨されているインストール方法](https://www.typescriptlang.org/download/)は、プロジェクトごとに TS コンパイラをインストールすることであり、プロジェクトの長期的な一貫性と再現性が確保されます。ただし、TS コンパイラをグローバルにインストールすることは、ホスト全体とその JS ランタイムに同じバージョンを提供するため、TS コンパイラがローカルにインストールされていないプロジェクトにも役立つ場合があります。これは、Amazon Linux で利用可能な RPM パッケージ (`nodejs20-typescript` や `nodejs22-typescript` など) では、まさにこの方法により、TS コンパイラをシステムレベルでグローバルに、かつサポートされている Node.js バージョンごとに個別にインストールします。

 *tsc* はどの Node.js バージョンにも直接依存しません。コンパイラは、[target](https://www.typescriptlang.org/tsconfig/#target) や [lib](https://www.typescriptlang.org/tsconfig/#lib) などのオプションを介して、特別なファイル (*tsconfig.json*) に定義されている特定レベルのランタイム機能を必要とします。これらのオプションの値は、[ECMAScript](https://en.wikipedia.org/wiki/ECMAScript_version_history) (ES) 標準のバージョンを表し、JS ランタイム環境でサポートされる場合とそうでない場合があります。Node.js のバージョンごとにサポートされる ES 標準のバージョンは異なります。Node.js のバージョンが新しいほど、サポートされる ES 標準バージョンはより高く、より完全になります。*tsconfig.json* がプロジェクトのルートディレクトリに存在しない場合は、デフォルトの設定オプションセットが使用されます。Node.js のさまざまなバージョンと、さまざまな ES 標準バージョンでサポートされている機能との互換性の表は、[node.green](https://node.green/) で参照できます。*tsc* には 100 を超えるさまざまなオプションがあり、*tsconfig.json* に定義されている場合があります。設定の連鎖もサポートされており、別のファイルで定義した設定オプションをメインファイルに含めることができます。このアプローチにより、特定バージョンの Node.js と互換性のある [Base TS Config](https://github.com/tsconfig/bases) をインストールし、これをプロジェクト固有のオプションで拡張できます。幸い、Node.js の Base TS Configs は、ノードモジュールとして提供されており、*npm* を使用してプロジェクトフォルダにインストールできます。Node.js バージョン [18](https://github.com/tsconfig/bases/blob/main/bases/node18.json)、[20](https://github.com/tsconfig/bases/blob/main/bases/node20.json)、[22](https://github.com/tsconfig/bases/blob/main/bases/node22.json) で config のソースコードを参照してください。

 Node.js ベースのランタイム設計には特定の弱点があります。ホストでサポーされるランタイムのバージョンは 1 つだけで、プロジェクトレベルですべての依存関係の再現性と一貫性が求められることです。これにより、TypeScript を使用する一般的なアプローチとして、TS コンパイラ、Node.js 現行バージョンの TS 基本設定、およびすべてのソフトウェアの依存関係をプロジェクト内にローカルにインストールしています。グローバルにインストールされるノードモジュールは *npm* などの CLI ツールのみであることが予想されますが、同じく CLI ツールである *tsc* がグローバルにインストールされることはほとんどありません。幸い、*tsc* のグローバル (システム全体) インストールとローカル (プロジェクト内) インストールは問題なく共存でき、異なるバージョンとして個別に使用することもできます。ローカルにインストールした *tsc* は、*npx* ツールを使用して実行する必要があることに注意してください。このツールは *npm* と一緒にインストールされます。したがって、システム TS コンパイラを使用する場合でも、ユーザーはランタイムのコンポーネントのバージョンを選択できます。例えば、Node.js (アクティブバージョンを代替手段で切り替える)、TS コンパイラ (ローカルまたはグローバルにインストールし、アクティブバージョンを代替手段で切り替える) を選択し、特定のニーズに合わせて設定できます。

 Amazon Linux は、*npm* などのグローバルにインストールされた他のノードモジュールと同じ方法で、TS コンパイラを Node.js バージョンごとにパッケージ化します。パッケージとバイナリは名前空間化され、名前の一部として Node.js のメジャーバージョンが含まれます。コンパイラのデフォルトの実行可能ファイル名 *tsc* は、alternatives ツールによってランタイムに管理され、ファイルがインストールされて実行される Node.js の現在アクティブなバージョンを指します。この選択は、現在の Node.js ランタイムバージョンには依存しません。*ノード*の実行可能ファイルで Node.js 20 を指し、*tsc* を Node.js 22 で解釈するように設定することもできます。TS コンパイラの名前空間名を使用することもできます。例えば、*tsc-\$1MAJOR\$1VERSION\$1* を、デフォルトの *tsc* 名が設定されている名前空間と独立して使用できます。

**TS コンパイラのアクティブバージョンを管理するために役立つコマンド**

1. どのような *alternatives* が設定されているかを確認します。

   ```
   alternatives --list
   ```

1. *tsc* の現在の設定を確認します。

   ```
   alternatives --display tsc
   ```

1. tsc バージョンをインタラクティブに変更します。

   ```
   alternatives --config tsc
   ```

1. 手動モードに切り替えて特定のバージョンを選択します。

   ```
   alternatives --set tsc /usr/bin/tsc-{MAJOR_VERSION}
   ```

1. 自動バージョンの選択モードに戻ります。

   ```
   alternatives --auto tsc
   ```

 同じシステムに複数のバージョンの Node と TS コンパイラをインストールして使用する例: 

```
# Check the AL2023 release
$ cat /etc/amazon-linux-release
Amazon Linux release 2023.9.20250929 (Amazon Linux)

# Install a TypeScript compiler for Node.js 20 and 22
# Node.js 20 and 22 will be installed automatically
$ sudo dnf install -qy nodejs20-typescript nodejs22-typescript

# Check what was installed
$ rpm -q nodejs20 nodejs20-typescript nodejs22 nodejs22-typescript
nodejs20-20.19.5-1.amzn2023.0.1.x86_64
nodejs20-typescript-5.9.2-1.amzn2023.0.1.noarch
nodejs22-22.19.0-1.amzn2023.0.1.x86_64
nodejs22-typescript-5.9.2-1.amzn2023.0.1.noarch

# Check the active version of Node.js - it is version 20
$ alternatives --display node
node - status is auto.
 link currently points to /usr/bin/node-20
/usr/bin/node-20 - priority 100
 slave npmrc: /usr/lib/nodejs20/lib/node_modules/npm/npmrc
 slave npm: /usr/bin/npm-20
 slave npx: /usr/bin/npx-20
 slave node_modules: /usr/lib/nodejs20/lib/node_modules
/usr/bin/node-22 - priority 100
 slave npmrc: /usr/lib/nodejs22/lib/node_modules/npm/npmrc
 slave npm: /usr/bin/npm-22
 slave npx: /usr/bin/npx-22
 slave node_modules: /usr/lib/nodejs22/lib/node_modules
Current 'best' version is /usr/bin/node-20.

# Check the active JS runtime version for TypeScript
# Currently, the tsc compiler will be executed by Node.js 22
$ alternatives --display tsc
tsc - status is auto.
 link currently points to /usr/bin/tsc-22
/usr/bin/tsc-22 - priority 100
 slave tsserver: /usr/bin/tsserver-22
/usr/bin/tsc-20 - priority 100
 slave tsserver: /usr/bin/tsserver-20
Current 'best' version is /usr/bin/tsc-22.

# Check versions printed by executables
$ node -v
v20.19.5

$ tsc -v
Version 5.9.2

# while the node is 20, tsc is executed by node 22 anyway
$ head -1 /usr/bin/tsc
#!/usr/bin/node-22

# However, instead of default executable names, e.g. node or tsc,
# we can use namespaced names to target any installed version
$ node-20 -v
v20.19.5

$ node-22 -v
v22.19.0

$ tsc-20 -v
Version 5.9.2

$ tsc-22 -v
Version 5.9.2

$ head -1 /usr/bin/tsc-20
#!/usr/bin/node-20

$ head -1 /usr/bin/tsc-22
#!/usr/bin/node-22
```