Negli ultimi anni, TypeScript e Node.js sono diventati due pilastri fondamentali per lo sviluppo moderno, utilizzati da aziende e sviluppatori di tutto il mondo. TypeScript, con il suo supporto ai tipi statici, ha rivoluzionato il modo in cui scriviamo JavaScript, migliorando la sicurezza del codice e riducendo gli errori. Dall'altro lato, Node.js ha permesso l'uso di JavaScript lato server, rendendo possibile lo sviluppo full-stack con un unico linguaggio.
Oggi, una nuova funzionalità sperimentale porta l'integrazione tra TypeScript e Node.js a un livello successivo: lo stripping dei tipi direttamente all'interno di Node.js.
Ma in cosa consiste esattamente questa innovazione e come cambierà il nostro modo di lavorare?
L'integrazione di TypeScript con Node.js non è un concetto nuovo. Da quando TypeScript ha preso piede nel 2012, gli sviluppatori hanno cercato tanti modi per usarlo all'interno di Node.js. Tuttavia, questa integrazione ha sempre richiesto strumenti aggiuntivi come transpiler (es. tsc, il compilatore di TypeScript) e bundler (come Webpack o esbuild) per convertire il codice TypeScript in JavaScript puro eseguibile da Node.js.
Nonostante questi strumenti, l'uso di TypeScript in Node.js comporta una certa complessità. Il processo di transpiling aggiunge passaggi extra al workflow di sviluppo, rallentando il build process e aumentando il rischio di errori tra ambienti diversi. È qui che entra in gioco la nuova funzionalità di stripping dei tipi, promettendo di snellire il processo.
Lo stripping dei tipi è una funzionalità sperimentale di Node.js che mira a rimuovere i tipi TypeScript senza necessità di un transpiler esterno. In pratica, Node.js si occupa direttamente di eliminare tutte le annotazioni di tipo presenti nel codice TypeScript, eseguendo poi il codice come JavaScript nativo.
Questa novità permette di eseguire Typescript senza ricorrere a strumenti aggiuntivi come ts-node o Babel e senza ricorrere ai sourcemaps per il debug.
Ma ATTENZIONE:
--experimental-transform-type
)
Come ogni nuova funzionalità, lo stripping dei tipi presenta sia vantaggi che svantaggi.
L'abilitazione dello stripping dei tipi in Node.js è un processo semplice. Essendo una funzionalità sperimentale, dovrai aggiungere un flag specifico quando esegui il tuo progetto Node.js.
1node --experimental-strip-types file.ts
Questo comando eseguirà il file .ts, eliminando tutte le annotazioni di tipo.
1function greet(name: string): string {
2 return `Hello, ${name}`;
3}
4
5console.log(greet("World"));
Quando esegui il file con il flag di stripping dei tipi, Node.js ignorerà le annotazioni ed eseguirà il codice come se fosse JavaScript puro.
Al momento potrete visualizzare un Warning relativo alla natura sperimentale di questa funzionalità, quindi questo flag potrebbe cambiare in futuro.
In fase di sviluppo, questa funzionalità può velocizzare l'esecuzione dei test, ma in ambienti di produzione è consigliabile fare attenzione, poiché non ci sono controlli sui tipi.
Infatti, proviamo a modificare il file sorgente con qualcosa del genere:
1function greet(name: invalidType): notExistingType {
2 return `Hello, ${name}`;
3}
4
5console.log(greet("World"));
Abbiamo messo due tipi non esistenti, infatti il nostro IDE ci segnalerà prontamente l’errore. Noi ignoriamo questo warning, salviamo il file e rilanciamo il comando:
1node --experimental-strip-types file.ts
Node ci ritornerà l’output del file, ignorando i problemi di typing; questo proprio perché questo flag rimuove i tipi, ma non esegue un controllo sulla loro validità!
Dunque per ovviare a questo problema, al momento dobbiamo fare ricorso al compilatore tsc attraverso il comando:
1npx tsc --noEmit file.ts && node --experimental-stip-types file.ts
Questo comando tramite il flag noEmit eviterà di generare il file JavaScript di output e si limiterà a fare un controllo sui tipo; se il controllo va a buon fine, il successivo comando eseguirà il codice, se invece fallisce avremo la lista dei problemi a schermo.
La funzionalità di stripping dei tipi è solo l'inizio di un possibile cambiamento nel modo in cui TypeScript e Node.js interagiscono. In futuro, potremmo vedere ulteriori miglioramenti o una versione stabile che permetta di integrare ancora più strettamente TypeScript nel runtime di Node.js, magari con controlli di tipo opzionali a runtime.
L'introduzione di questa funzionalità ha già generato discussioni all'interno della community degli sviluppatori. Alcuni la vedono come un passo avanti verso una maggiore efficienza, mentre altri sono preoccupati per la potenziale perdita di sicurezza senza la verifica dei tipi.
Per approfondire l’argomento di Node.js e TypeScript vi rimandiamo alla documentazione ufficiale.
Inoltre, l’intero ecosistema Node.js è in fermento, con le ultime versioni sono approdate molte funzionalità interessanti (oltre il già citato supporto a TypeScript sperimentale) come:
Lo stripping dei tipi rappresenta una nuova frontiera per lo sviluppo con TypeScript e Node.js, offrendo una soluzione più rapida e snella per chi cerca di sfruttare i benefici di TypeScript senza la complessità aggiuntiva del transpiling. Sebbene ancora sperimentale, questa funzionalità offre un'interessante visione del futuro dell'ecosistema Node.js.
Per gli sviluppatori, ora è il momento di sperimentare, testare questa funzionalità e fornire feedback per migliorare ulteriormente il supporto a TypeScript in Node.js.
Chi sa? Forse un giorno, l'uso di TypeScript in Node.js diventerà ancora più integrato e naturale rispetto a oggi ma, intanto, c'è da ringraziare un italiano, Marco Ippolito per queste nuove feature. 😉