

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# TypeScriptdi AL2 023
<a name="typescript"></a>

**catatan**  
 Dokumen ini memberikan informasi penting tentang TypeScript dan lingkungan eksekusi berbasis Node.js. Ini juga mencakup alur kerja pengembangan yang khas dan menjelaskan bagaimana TypeScript dikemas dalam AL2 023 untuk memberikan lingkungan pengembangan yang konsisten dan dapat direproduksi. 

 [https://www.typescriptlang.org/](https://www.typescriptlang.org/)(TS) adalah bahasa pemrograman berdasarkan JavaScript (JS) yang menawarkan semua fitur JS, dan juga [memperluasnya dengan sistem tipe](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html). Dalam skenario tipikal, program yang ditulis dalam TS diterjemahkan ke dalam kode JS terlebih dahulu, dan kemudian dijalankan sebagai program JS biasa lainnya olehNode.js. *Dalam terminologi khusus TS, proses penerjemahan ini disebut [“kompilasi” dan dilakukan oleh “kompiler”, yang](https://www.typescriptlang.org/docs/handbook/typescript-tooling-in-5-minutes.html) disebut tsc.* Kompiler *tsc* itu sendiri ditulis dalam JS, sehingga untuk menjalankannya, ia juga membutuhkan lingkungan runtime JS, seperti. Node.js Tidak seperti beberapa lingkungan runtime JS lainnya, Node.js saat ini hanya memiliki dukungan TS eksperimental dan ringan. Dukungan TS penuh, termasuk pemeriksaan tipe, masih memerlukan penggunaan paket pihak ketiga, seperti [TypeScript](https://www.npmjs.com/package/typescript). Cara yang diharapkan untuk mendapatkan *tsc* (kompiler TS) untuk lingkungan Node.js runtime adalah dengan menginstal modul node TypeScript. Ini dapat dilakukan dengan menggunakan salah satu manajer paket, biasanya *npm*. Ada dua cara untuk menginstal kompiler TS menggunakan *npm*: secara global dan dalam proyek. [Metode yang direkomendasikan secara resmi adalah menginstal](https://www.typescriptlang.org/download/) kompiler TS berdasarkan per proyek, yang memastikan konsistensi dan reproduktifitas jangka panjang untuk proyek. Namun, menginstal kompiler TS secara global mungkin masih berguna, karena menyediakan versi yang sama untuk seluruh host dan runtime JS-nya, dan dengan demikian untuk proyek yang tidak menginstal kompiler TS secara lokal. Inilah tepatnya bagaimana paket RPM tersedia di Amazon Linux, seperti `nodejs20-typescript` atau`nodejs22-typescript`, menginstal kompiler TS: secara global di tingkat sistem, dan secara terpisah untuk setiap Node.js versi yang didukung. 

 *Tsc* tidak secara langsung bergantung pada Node.js versi apa pun. [https://www.typescriptlang.org/tsconfig/#target](https://www.typescriptlang.org/tsconfig/#target) Nilai opsi ini mewakili versi standar [ECMAScript](https://en.wikipedia.org/wiki/ECMAScript_version_history)(ES), yang mungkin (atau mungkin tidak) didukung oleh lingkungan runtime JS. Versi yang berbeda Node.js mendukung versi standar ES yang berbeda. Semakin baru versiNode.js, semakin tinggi dan lebih lengkap versi standar ES yang didukung. Jika *tsconfig.json* tidak ada di direktori root proyek, maka set default opsi konfigurasi akan digunakan. Tabel kompatibilitas dengan versi yang berbeda Node.js dan fitur yang didukung dari berbagai versi standar ES tersedia di [node.green](https://node.green/). *Tsc* memiliki lebih dari 100 opsi berbeda, yang dapat didefinisikan di *tsconfig.json*. Rangkaian konfigurasi juga didukung, ketika beberapa opsi konfigurasi didefinisikan dalam file lain dan kemudian disertakan dalam file utama. Pendekatan ini memungkinkan seseorang untuk menginstal [Base TS Config](https://github.com/tsconfig/bases) yang kompatibel dengan versi tertentuNode.js, dan kemudian memperluasnya dengan opsi khusus proyek. Untungnya, Base TS Configs for Node.js tersedia sebagai modul node yang dapat diinstal di folder proyek menggunakan *npm*. Berikut adalah kode sumber konfigurasi untuk Node.js versi [18](https://github.com/tsconfig/bases/blob/main/bases/node18.json), [20](https://github.com/tsconfig/bases/blob/main/bases/node20.json), dan [22](https://github.com/tsconfig/bases/blob/main/bases/node22.json). 

 Desain runtime Node.js berbasis memiliki kelemahan tertentu: hanya mendukung satu versi runtime pada host, dan membutuhkan reproduktifitas dan konsistensi semua dependensi di tingkat proyek. Hal ini menyebabkan pendekatan umum berikut untuk menggunakan TypeScript: kompiler TS, konfigurasi dasar TS untuk Node.js versi saat ini, dan semua dependensi perangkat lunak diinstal secara lokal, di dalam proyek. Meskipun modul node yang diinstal secara global diharapkan menjadi alat CLI saja, seperti *npm*, *tsc*, yang juga merupakan alat CLI, jarang diinstal secara global. Untungnya, instalasi global (luas sistem) dan lokal (dalam proyek) *tsc* dapat hidup berdampingan tanpa masalah dan juga dapat berupa versi berbeda yang digunakan secara independen. *Perhatikan bahwa *tsc* yang diinstal secara lokal harus dijalankan menggunakan alat *npx*, yang diinstal bersama dengan npm.* Jadi, bahkan dengan kompiler TS sistem, pengguna memiliki kesempatan untuk memilih versi komponen runtime, seperti Node.js (dengan mengganti versi aktif melalui alternatif), kompiler TS (dengan menginstalnya secara lokal, atau, secara global dan juga beralih versi aktif melalui alternatif), dan mengonfigurasinya untuk kebutuhan spesifik. 

 Amazon Linux mengemas kompiler TS dengan cara yang sama seperti modul node yang diinstal secara global lainnya, seperti *npm*, pada dasar per Node.js versi. Paket dan binari diberi namespace dan berisi versi utama Node.js sebagai bagian dari nama mereka. Nama default yang dapat dieksekusi dari kompiler, *tsc*, dikelola saat runtime oleh alat alternatif dan arahkan versi aktif saat ini yang telah Node.js di-insatalled dan akan dieksekusi oleh. Pilihan ini tidak bergantung pada versi Node.js runtime saat ini. Dimungkinkan untuk memiliki *node* yang dapat dieksekusi menunjuk ke Node.js 20 dan *tsc* dikonfigurasi untuk ditafsirkan oleh 22. Node.js *Dimungkinkan juga untuk menggunakan nama namespace dari kompiler TS, misalnya *tsc- \$1MAJOR\$1VERSION\$1 secara independen untuk apa nama tsc* default dikonfigurasi.* 

**Beberapa perintah yang berguna untuk mengelola versi aktif kompiler TS**

1. Periksa *alternatif* apa yang dikonfigurasi

   ```
   alternatives --list
   ```

1. Periksa *konfigurasi tsc* saat ini

   ```
   alternatives --display tsc
   ```

1. Ubah versi secara interaktif tsc

   ```
   alternatives --config tsc
   ```

1. Beralih ke mode manual dan pilih versi tertentu

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

1. Beralih kembali ke mode pemilihan versi auto

   ```
   alternatives --auto tsc
   ```

 Contoh menginstal dan menggunakan beberapa versi Node dan kompiler TS pada sistem yang sama: 

```
# 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
```