|
| 1 | +--- |
| 2 | +display: "Moduli Isolati" |
| 3 | +oneline: "Si assicura che ogni file possa essere compilato in sicurezza senza basarsi sulle altre importazioni" |
| 4 | +--- |
| 5 | + |
| 6 | +Quando usi TypeScript per produrre codice JavaScript, è usanza comune usare altri transpilers come ad esempio [Babel](https://babeljs.io). |
| 7 | +Tuttavia, gli altri transpilers possono operare solo su un singolo file alla volta, questo significa che non possono fare cambiamenti che dipendono dalla comprensione dell'intero progetto. |
| 8 | +Questa regola si applica anche al `ts.transpileModule` API di TypeScript che è usata da alcuni strumenti di esecuzione. |
| 9 | + |
| 10 | +Queste limitazioni possono causare problemi di esecuzione con alcune funzionalità di TypeScript come `const enum` e `namespace`. |
| 11 | +Impostando la flag `isolatedModules` chiedi a TypeScript di avvisarti se stai scrivendo del codice che non può essere correttamente interpretato da un processo di transpilation su un singolo file. |
| 12 | + |
| 13 | +Esso non cambia la forma del tuo codice e nemmeno la forma del controllo di TypeScript e il processo di emissione. |
| 14 | + |
| 15 | +Alcuni esempi di codice che non funzionano quando `isolatedModules` è abilitato. |
| 16 | + |
| 17 | +#### Esportazione di idententificatori senza valore |
| 18 | + |
| 19 | +In TypeScript, puoi importare un _type_ e di conseguenza esportarlo: |
| 20 | + |
| 21 | +```ts twoslash |
| 22 | +// @noErrors |
| 23 | +import { tipo, funzione } from "modulo"; |
| 24 | + |
| 25 | +funzione(); |
| 26 | + |
| 27 | +export { tipo, funzione }; |
| 28 | +``` |
| 29 | + |
| 30 | +Dato che non ci sono valori per `tipo`, l'emissione `export` non proverà ad esportarlo (questo perché ci sarebbe un errore di esecuzione in JavaScript): |
| 31 | + |
| 32 | +```js |
| 33 | +export { funzione }; |
| 34 | +``` |
| 35 | + |
| 36 | +I transpilers a singolo file non sanno se `tipo` produce un valore o meno, quindi c'è un errore nell'esportazione di un nome che si riferisce solo ad un tipo. |
| 37 | + |
| 38 | +#### File Non-Moduli |
| 39 | + |
| 40 | +Se `isolatedModules` è impostato, tutti file di implementazione devono essere _modules_ (ciò significa che esso ha alcune forme di `import` / `export`). Un errore appare se nessun file è un modulo: |
| 41 | + |
| 42 | +```ts twoslash |
| 43 | +// @errors: 1208 |
| 44 | +// @isolatedModules |
| 45 | +function fn() {} |
| 46 | +``` |
| 47 | + |
| 48 | +Questa regola non viene applicata ai file `.d.ts` |
| 49 | + |
| 50 | +#### Riferimenti ai membri `const enum` |
| 51 | + |
| 52 | +In TypeScript, quando ti riferisci ad un membro `const enum`, il riferimento viene rimpiazzato dal suo valore attuale nel JavaScript compilato. Cambiando questo TypeScript: |
| 53 | + |
| 54 | +```ts twoslash |
| 55 | +declare const enum Numeri { |
| 56 | + Zero = 0, |
| 57 | + Uno = 1, |
| 58 | +} |
| 59 | +console.log(Numeri.Zero + Numeri.Uno); |
| 60 | +``` |
| 61 | + |
| 62 | +Con questo JavaScript: |
| 63 | + |
| 64 | +```ts twoslash |
| 65 | +// @showEmit |
| 66 | +// @removeComments |
| 67 | +declare const enum Numeri { |
| 68 | + Zero = 0, |
| 69 | + Uno = 1, |
| 70 | +} |
| 71 | +console.log(Numeri.Zero + Numeri.Uno); |
| 72 | +``` |
| 73 | + |
| 74 | +Senza la conoscenza del valore di questi membri, gli altri transpilers non possono rimpiazzare il riferimento a `Numeri`, questo comporterebbe un errore di esecuzione se lasciato a se stesso (dal momento in cui non ci sono oggetti di tipo `Numeri` in esecuzione). |
| 75 | +A causa di questo, quando `isolatedModules` è impostato, c'è un errore nel riferire un ambiente ad un membro `const enum`. |
0 commit comments