TypeScript e tsconfig.json
Questo articolo spiega TypeScript e tsconfig.json.
Partendo dal ruolo di base di TypeScript, spiegheremo con esempi specifici come funziona tsconfig.json all'interno di un progetto.
YouTube Video
TypeScript e tsconfig.json
TypeScript è 'JavaScript con i tipi.'. Tuttavia, per utilizzare TypeScript efficacemente nei progetti reali, è essenziale comprendere tsconfig.json correttamente e configurarlo intenzionalmente.
Perché abbiamo bisogno di TypeScript?
Innanzitutto, il motivo principale per usare TypeScript è 'la capacità di individuare gli errori prima dell'esecuzione.'.
1function add(a: number, b: number): number {
2 return a + b;
3}
4
5add(1, "2");Questo codice non causerebbe un errore in JavaScript fino al runtime, ma in TypeScript provoca un errore di tipo in fase di compilazione.
Questa 'rilevazione precoce' migliora notevolmente l'efficienza e la qualità dello sviluppo.
Come viene eseguito TypeScript?
In linea di principio, TypeScript non può essere eseguito così com'è. Devi convertirlo in JavaScript utilizzando tsc (TypeScript Compiler)..
1npm install -D typescript
2npx tsc --init- Eseguendo questa operazione, viene generato
tsconfig.json, che rappresenta il file centrale che definisce il comportamento del progetto TypeScript.
Qual è il ruolo di tsconfig.json?
tsconfig.json è un file di configurazione che determina 'quali file,' 'con quali regole,' e 'come convertirli.'. Sebbene possa sembrare complesso all'inizio, solo alcune impostazioni sono veramente importanti.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "strict": true
6 }
7}- Con queste sole impostazioni, è possibile uno sviluppo moderno e sicuro in TypeScript.
target: La versione di JavaScript da generare
target determina il livello di specifica del JavaScript in output.
1"target": "ES2020"Con questa impostazione, TypeScript genererà JavaScript equivalente a ES2020. Per ambienti più vecchi, seleziona ES5; solo per gli ambienti più recenti, scegli ES2022, ecc.
Quando si specifica ESNext
1"target": "ESNext"-
ESNextindica che verrà generata la sintassi JavaScript più recente così com'è. TypeScript non transpila la sintassi, lasciando il compito di gestirla all'ambiente di esecuzione, come Node.js o i browser. -
Pertanto,
ESNextè adatto quando si mira solo alle versioni più recenti di Node.js o se si utilizza Babel o un bundler per la transpilation separatamente. D'altra parte, se l'ambiente di esecuzione non supporta la sintassi più recente, ciò potrebbe causare errori in fase di esecuzione, quindi è necessaria cautela.
module: Specifica il formato dei moduli
module specifica il formato dei moduli.
1"module": "ESNext"ESNextè lo standard nel frontend e nei moderni ambienti Node.js.- Scegli
"CommonJS"solo se hai bisogno di CommonJS.
strict: Massimizza la sicurezza dei tipi
strict è un interruttore per massimizzare la sicurezza di TypeScript.
1"strict": true- Abilitando questa opzione, verranno rilevati tipi ambigui e potenziali bug.
modalità strict e any implicito
Quando abiliti strict, TypeScript considera come errore le variabili per cui non può dedurre il tipo.
1function printValue(value) {
2 console.log(value);
3}- Questa variabile
valuenon ha informazioni sul tipo alla dichiarazione, quindi TypeScript non può determinarne il tipo. Come risultato, viene usatoanyimplicitamente, il che genera un avviso (errore) in modalitàstrict.
1function printValue(value: number) {
2 console.log(value);
3}- Specificando esplicitamente il tipo in questo modo, TypeScript capisce che 'questa variabile gestisce solo numeri.'. In TypeScript è più importante che il tipo sia determinabile in modo univoco piuttosto che poter essere omesso.
include/exclude: Controllo su quali file compilare
In tsconfig.json puoi specificare quali file includere e quali file escludere dalla compilazione.
1{
2 "include": ["src"],
3 "exclude": ["node_modules"]
4}- In questo modo saranno gestiti da TypeScript solo i file presenti in
src. node_modulesspecificato inexcludesarà escluso dalla compilazione anche se incluso in un percorso definito ininclude.
outDir: Specifica la directory di output
Specifica outDir per gestire la posizione dell'output del build.
1"outDir": "dist"- Così, tutti i risultati compilati saranno scritti nella cartella
dist. In pratica, separare il codice sorgente dagli artefatti di build è la norma.
rootDir: Specifica la directory sorgente
rootDir specifica la directory che TypeScript considera come radice del codice sorgente.
1"rootDir": "src"-
Questa impostazione consente a TypeScript di preservare la struttura delle cartelle basata su
srcdurante la generazione dei file. Ad esempio,src/index.tsverrà emesso comedist/index.js. -
La struttura della directory specificata in
rootDirverrà replicata inoutDir.
esModuleInterop: Ponte tra CommonJS ed ES Modules
Ora diamo un'occhiata a esModuleInterop.
1"esModuleInterop": true- Se abilitata, puoi utilizzare in modo sicuro moduli CommonJS con la sintassi
import.
1import fs from "fs";- Questa impostazione è quasi essenziale quando si utilizza Node.js.
noImplicitAny: Vietare i tipi impliciti 'any'
È anche importante rafforzare i controlli dei tipi in tsconfig.json.
1"noImplicitAny": true- Con questa opzione puoi vietare i tipi
anyimpliciti. In questo modo puoi rilevare facilmente i punti in cui hai dimenticato di specificare un tipo.
Configurazione per rilevare codice inutilizzato
Le impostazioni per rilevare codice inutilizzato sono utili anche per migliorare la manutenibilità.
1"noUnusedLocals": true,
2"noUnusedParameters": true- Così, variabili e argomenti inutili saranno subito segnalati con avvisi.
lib: Definisci le API integrate disponibili
lib è un'impostazione che specifica le API standard che TypeScript presuppone esistano.
1"lib": ["ES2020", "DOM"]- Con questa impostazione, i seguenti tipi diventano disponibili:.
Con
ES2020, funzionalità moderne comePromise,MapeSetsono disponibili. ConDOM, sono disponibili API del browser comedocument,windoweHTMLElement.
Nel frontend, includi DOM; per progetti solo Node.js, rimuovi DOM per evitare che vengano inclusi tipi globali non necessari.
moduleResolution: Regole per la risoluzione dei moduli
moduleResolution determina come vengono risolti i moduli specificati negli import.
1"moduleResolution": "Node"Le due opzioni principali sono le seguenti:.
- Se specifichi
Node, verranno utilizzate le regole di risoluzione dei moduli di Node.js. Classicè il vecchio metodo specifico di TypeScript, ma oggi è raramente usato.
Negli ambienti che usano Node.js o un bundler, è sicuro specificare esplicitamente Node.
Un tsconfig.json minimale e pronto per la produzione
Sulla base di quanto visto finora, un tsconfig.json minimale e pronto per la produzione potrebbe essere così:.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "moduleResolution": "Node",
6 "lib": ["ES2020", "DOM"],
7 "strict": true,
8 "rootDir": "src",
9 "outDir": "dist",
10 "esModuleInterop": true,
11 "noImplicitAny": true,
12 "noUnusedLocals": true,
13 "noUnusedParameters": true
14 },
15 "include": ["src"]
16}Questa configurazione offre una base sicura sia per progetti frontend che Node.js.
Riassunto: tsconfig.json è un 'regolamento'
tsconfig.json non è solo un file di configurazione, ma un 'regolamento' che si applica all'intero progetto. Con tsconfig.json, vengono definite chiaramente politiche importanti come le seguenti:.
- Il livello di sicurezza dei tipi.
- Le convenzioni di codifica per il tuo team.
- Prevenzione di bug futuri.
Comprendendo tsconfig.json, sarai in grado di non solo scrivere TypeScript, ma anche progettare i tuoi progetti per un uso sicuro di TypeScript.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.