

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# TypeScriptnel AL2 2023
<a name="typescript"></a>

**Nota**  
 Questo documento fornisce le informazioni essenziali sul relativo ambiente di esecuzione TypeScript basato su Node.js. Descrive inoltre un tipico flusso di lavoro di sviluppo e spiega come TypeScript è confezionato in AL2 023 per fornire un ambiente di sviluppo coerente e riproducibile. 

 [https://www.typescriptlang.org/](https://www.typescriptlang.org/)(TS) è un linguaggio di programmazione basato su JavaScript (JS) che offre tutte le funzionalità di JS e [lo estende](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html) anche con un sistema di tipi. In uno scenario tipico, i programmi scritti in TS vengono prima tradotti nel codice JS e quindi eseguiti come qualsiasi altro normale programma JS daNode.js. *Nella terminologia specifica di TS, questo processo di traduzione è chiamato [«compilazione» e viene eseguito da un «compilatore»](https://www.typescriptlang.org/docs/handbook/typescript-tooling-in-5-minutes.html), chiamato tsc.* Il compilatore *tsc* stesso è scritto in JS, quindi per funzionare necessita anche di un ambiente di runtime JS, ad esempio. Node.js A differenza di altri ambienti di runtime JS, Node.js attualmente ha solo un supporto TS sperimentale e leggero. Un supporto TS completo, incluso il controllo dei tipi, richiede ancora l'utilizzo di pacchetti di terze parti, come il [typescript](https://www.npmjs.com/package/typescript). Il modo previsto per ottenere *tsc* (il compilatore TS) per l'ambiente di Node.js runtime consiste nell'installare il modulo del nodo typescript. *Questo può essere fatto usando uno dei gestori di pacchetti, in genere npm.* Esistono due modi per installare il compilatore TS usando *npm*: globalmente e in un progetto. [Il metodo ufficialmente consigliato consiste nell'installare](https://www.typescriptlang.org/download/) il compilatore TS per progetto, il che garantisce la coerenza e la riproducibilità a lungo termine dei progetti. Tuttavia, l'installazione globale del compilatore TS potrebbe comunque essere utile, perché fornisce la stessa versione per l'intero host e il relativo runtime JS, e quindi per i progetti che non hanno un compilatore TS installato localmente. Questo è esattamente il modo in cui i pacchetti RPM disponibili su Amazon Linux, come `nodejs20-typescript` o`nodejs22-typescript`, installano un compilatore TS: globalmente a livello di sistema e separatamente per ogni versione supportataNode.js. 

 Il *tsc* non dipende direttamente da nessuna versione. Node.js [https://www.typescriptlang.org/tsconfig/#target](https://www.typescriptlang.org/tsconfig/#target) I valori di queste opzioni rappresentano una versione dello standard [ECMAScript](https://en.wikipedia.org/wiki/ECMAScript_version_history)(ES), che può (o meno) essere supportata dall'ambiente di runtime JS. Diverse versioni di Node.js supportano diverse versioni dello standard ES. Più recente è la versione diNode.js, più alta e completa è la versione standard ES supportata. Se *tsconfig.json* non esiste nella directory principale di un progetto, verrà utilizzato il set predefinito di opzioni di configurazione. [La tabella di compatibilità con le diverse versioni Node.js e le funzionalità supportate delle varie versioni standard di ES è disponibile all'indirizzo node.green.](https://node.green/) *Il *tsc* ha più di 100 diverse opzioni, che possono essere definite in tsconfig.json.* Il concatenamento della configurazione è supportato anche quando alcune opzioni di configurazione sono definite in un altro file e quindi incluse nel file principale. Questo approccio consente di installare un [Config TS di base](https://github.com/tsconfig/bases) compatibile con una determinata versione di Node.js e quindi estenderlo con opzioni specifiche del progetto. *Fortunatamente, i Base TS Configs for Node.js sono disponibili come moduli di nodi che possono essere installati in una cartella di progetto utilizzando npm.* [Ecco il codice sorgente della configurazione per le Node.js versioni [18](https://github.com/tsconfig/bases/blob/main/bases/node18.json), [20 e 22](https://github.com/tsconfig/bases/blob/main/bases/node20.json).](https://github.com/tsconfig/bases/blob/main/bases/node22.json) 

 La progettazione Node.js basata sul runtime presenta un certo punto debole: supporta solo una versione del runtime su un host e richiede la riproducibilità e la coerenza di tutte le dipendenze a livello di progetto. Ciò ha portato al seguente approccio comune di utilizzo TypeScript: il compilatore TS, la configurazione di base TS per la Node.js versione corrente e tutte le dipendenze software vengono installate localmente, all'interno di un progetto. Sebbene si preveda che i moduli di nodo installati a livello globale siano solo strumenti CLI, come *npm*, *tsc*, che è anche uno strumento CLI, viene installato raramente a livello globale. Fortunatamente, le installazioni globali (a livello di sistema) e locali (all'interno di un progetto) di *tsc* possono coesistere senza problemi e possono anche essere versioni diverse che vengono utilizzate indipendentemente. *Nota che un *tsc* installato localmente deve essere eseguito utilizzando lo strumento *npx, che viene installato insieme a npm*.* Pertanto, anche con un compilatore TS di sistema, gli utenti hanno la possibilità di scegliere versioni dei componenti del runtime, ad esempio Node.js (cambiando la versione attiva tramite alternative), un compilatore TS (installandolo localmente o globalmente e cambiando anche la versione attiva tramite alternative) e configurandolo per esigenze specifiche. 

 Amazon Linux impacchetta un compilatore TS allo stesso modo di altri moduli di nodi installati a livello globale, come *npm*, su una versione base per Node.js versione. I pacchetti e i file binari hanno uno spazio dei nomi e contengono la versione principale di come parte dei Node.js loro nomi. Il nome eseguibile predefinito del compilatore, *tsc*, è gestito in fase di esecuzione dallo strumento alternatives e indica la versione attualmente attiva Node.js per la quale è stato installato e da cui verrà eseguito. Questa selezione non dipende dalla versione di runtime corrente. Node.js È possibile avere l'eseguibile del *nodo* che punta a Node.js 20 e *tsc* configurato per essere interpretato dal 22. Node.js *È anche possibile utilizzare i nomi con namespace di un compilatore TS, ad esempio *tsc- \$1MAJOR\$1VERSION\$1 indipendentemente da ciò per cui è configurato il nome tsc* predefinito.* 

**Alcuni comandi utili per gestire la versione attiva di un compilatore TS**

1. Controlla per quali *alternative* è configurato

   ```
   alternatives --list
   ```

1. Controlla la *configurazione attuale di tsc*

   ```
   alternatives --display tsc
   ```

1. Cambia la versione in modo interattivo tsc

   ```
   alternatives --config tsc
   ```

1. Passa alla modalità manuale e seleziona una versione specifica

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

1. Torna alla modalità di selezione automatica della versione

   ```
   alternatives --auto tsc
   ```

 Un esempio di installazione e utilizzo di diverse versioni di Node e di un compilatore TS sullo stesso sistema: 

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