{"id":69406,"date":"2023-05-24T11:59:36","date_gmt":"2023-05-24T10:59:36","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=69406&#038;post_type=knowledgebase&#038;preview_id=69406"},"modified":"2025-10-01T20:43:45","modified_gmt":"2025-10-01T19:43:45","slug":"typescript","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/typescript\/","title":{"rendered":"Cos&#8217;\u00e8 TypeScript? Guida completa"},"content":{"rendered":"<p>Nel frenetico panorama digitale di oggi, JavaScript \u00e8 diventato il linguaggio di riferimento per la creazione di applicazioni web dinamiche. Tuttavia, la tipizzazione dinamica di JavaScript pu\u00f2 talvolta portare a errori impercettibili, difficili da individuare nelle prime fasi di sviluppo.<\/p>\n<p>\u00c8 qui che entra in gioco <a href=\"https:\/\/kinsta.com\/it\/blog\/typescript-5-0\/\">TypeScript<\/a>, una tecnologia che rivoluziona il modo in cui scriviamo il codice <a href=\"https:\/\/kinsta.com\/javascript\/\">JavaScript<\/a>.<\/p>\n<p>In questo articolo andremo alla scoperta di TypeScript e delle sue caratteristiche principali, i vantaggi e le best practice. Scopriremo come TypeScript rimuove i limiti di JavaScript e introduce la tipizzazione statica nello sviluppo di applicazioni web solide e scalabili.<\/p>\n<p>Cominciamo!<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Cos&#8217;\u00e8 TypeScript?<\/h2>\n<p>TypeScript \u00e8 un superset di JavaScript che aggiunge tipizzazione statica e funzioni avanzate a JavaScript. \u00c8 stato sviluppato da Microsoft e rilasciato nell&#8217;ottobre del 2012. Dal momento del rilascio, si \u00e8 rapidamente diffuso nella community del web development.<\/p>\n<p>Secondo un <a href=\"https:\/\/survey.stackoverflow.co\/2022\/#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages\" target=\"_blank\" rel=\"noopener noreferrer\">sondaggio condotto nel 2022 da Stack Overflow<\/a>, TypeScript \u00e8 la quarta tecnologia pi\u00f9 diffusa, con il 73,46% delle preferenze. TypeScript \u00e8 stato creato per risolvere alcuni limiti di JavaScript, come la mancanza di tipizzazione forte, che pu\u00f2 portare a errori impercettibili e difficili da individuare.<\/p>\n<p>Si consideri, ad esempio, il seguente codice JavaScript:<\/p>\n<pre><code class=\"language-js\">function add(a, b) {\n  return a + b;\n}\n\nlet result = add(10, \"20\"); \/\/ No error, but result is \"1020\" instead of 30<\/code><\/pre>\n<p>Questo codice crea una funzione <code>add<\/code>, tipizzata dinamicamente. Il tipo degli argomenti <code>a<\/code> e <code>b<\/code> non viene imposto. Di conseguenza, passare una stringa invece di un numero come argomento non produce un errore. I valori sono concatenati come stringhe, provocando un comportamento inatteso.<\/p>\n<p>Con TypeScript \u00e8 stata introdotta la tipizzazione statica, che consente a <a href=\"https:\/\/kinsta.com\/it\/blog\/tipi-di-developer\/\">chi sviluppa<\/a> di specificare i tipi di variabili, parametri di funzione e valori di ritorno, individuando gli errori legati al tipo.<\/p>\n<pre><code class=\"language-typescript\">function add(a: number, b: number): number {\n  return a + b;\n}\n\nlet result = add(10, \"20\"); \/\/ Error: Argument of type 'string' is not assignable to parameter of type 'number'<\/code><\/pre>\n<p>Nel codice TypeScript qui sopra, i tipi dei parametri <code>a<\/code> e <code>b<\/code> sono definiti esplicitamente come numeri. Se viene passata come argomento una stringa, TypeScript emetter\u00e0 un errore in fase di compilazione, fornendo un feedback tempestivo che permette di individuare eventuali problemi.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Microsoft \u00e8 coinvolta attivamente nella manutenzione e nel miglioramento di TypeScript e rilascia regolarmente nuove versioni con funzionalit\u00e0 avanzate e prestazioni  migliori, come l&#8217;ultima versione, <a href=\"https:\/\/kinsta.com\/it\/blog\/typescript-5-0\/\">TypeScript 5.0<\/a>.<\/p>\n<\/aside>\n\n\n<h2>Caratteristiche di TypeScript<\/h2>\n<p>TypeScript offre numerose e moderne funzionalit\u00e0 di <a href=\"https:\/\/kinsta.com\/web-development\/\">sviluppo web<\/a> che permettono di superare alcuni dei limiti di JavaScript. Queste caratteristiche migliorano l&#8217;esperienza di sviluppo e l&#8217;organizzazione del codice. In questo articolo analizzeremo:<\/p>\n<div><\/div><kinsta-auto-toc list-style=\"decimal\" selector=\"h3\" count-number=\"7\" sub-toc=\"true\"><\/kinsta-auto-toc>\n<h3>1. Tipizzazione statica<\/h3>\n<p>TypeScript dispone di un solido sistema di tipizzazione che consente di specificare in fase di compilazione i tipi di variabili e parametri delle funzioni. Questo permette di individuare tempestivamente gli errori legati al tipo, rende il codice pi\u00f9 affidabile e meno soggetto a bug.<\/p>\n<p>In JavaScript, invece, le variabili sono tipizzate dinamicamente, il che significa che il tipo pu\u00f2 cambiare durante l&#8217;esecuzione.<\/p>\n<p>Ad esempio, il codice JavaScript qui sotto mostra la dichiarazione di due variabili tipizzate dinamicamente come numero e stringa:<\/p>\n<pre><code class=\"language-js\">let num1 = 10; \/\/ num1 is dynamically typed as a number\nlet num2 = \"20\"; \/\/ num2 is dynamically typed as a string\n\nlet result = num1 + num2; \/\/ No error at compile-time\nconsole.log(result); \/\/ Output: \"1020\"<\/code><\/pre>\n<p>Questo codice restituir\u00e0 &#8220;1020&#8221;, una concatenazione di numero e stringa: non \u00e8 l&#8217;output previsto e ci\u00f2 pu\u00f2 avere un effetto negativo sul codice. Lo svantaggio di JavaScript \u00e8 che non emette alcun errore. Con TypeScript si pu\u00f2 risolvere il problema specificando i tipi di ogni variabile:<\/p>\n<pre><code class=\"language-typescript\">let num1: number = 10; \/\/ num1 is statically typed as a number\nlet num2: string = \"20\"; \/\/ num2 is statically typed as a string\n\nlet result = num1 + num2; \/\/ Error: Type 'string' is not assignable to type 'number'<\/code><\/pre>\n<p>Nel codice qui sopra, il tentativo di concatenare un numero e una stringa utilizzando l&#8217;operatore <code>+<\/code> d\u00e0 luogo a un errore in fase di compilazione, perch\u00e9 TypeScript applica un controllo rigoroso.<\/p>\n<p>Questo permette di catturare possibili bug legati al tipo prima dell&#8217;esecuzione del codice, permettendo di scrivere codice pi\u00f9 solido e privo di errori.<\/p>\n<h3>2. Tipizzazione opzionale<\/h3>\n<p>TypeScript permette di scegliere se usare o meno la tipizzazione statica. Ci\u00f2 significa che \u00e8 possibile decidere di specificare i tipi per le variabili e i parametri delle funzioni o lasciare che TypeScript deduca automaticamente i tipi in base al valore assegnato.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-typescript\">let num1: number = 10; \/\/ num1 is statically typed as a number\nlet num2 = \"20\"; \/\/ num2 is dynamically typed as a string\n\nlet result = num1 + num2; \/\/ Error: Operator '+' cannot be applied to types 'number' and 'string'<\/code><\/pre>\n<p>In questo codice, il tipo <code>num2<\/code> viene dedotto come <code>string<\/code> in base al valore assegnato, ma se lo si desidera, si pu\u00f2 scegliere il tipo.<\/p>\n<p>\u00c8 anche possibile impostare il tipo su <code>any<\/code>, che accetta qualsiasi tipo di valore:<\/p>\n<pre><code class=\"language-typescript\">let num1: number = 10;\nlet num2: any = \"20\";\n\nlet result = num1 + num2; \/\/ Error: Operator '+' cannot be applied to types 'number' and 'string'<\/code><\/pre>\n<h3>3. Caratteristiche ES6+<\/h3>\n<p>TypeScript supporta le moderne funzionalit\u00e0 di JavaScript, comprese quelle introdotte con ECMAScript 6 (ES6) e versioni successive.<\/p>\n<p>Ci\u00f2 consente di scrivere codice pi\u00f9 pulito ed espressivo utilizzando funzioni come le arrow function, la destrutturazione, i template literal e altro ancora, con un type checking aggiuntivo.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-typescript\">const greeting = (name: string): string =&gt; {\n  return `Hello, ${name}!`; \/\/ Use of arrow function and template literal\n};\n\nconsole.log(greeting(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>In questo codice, la arrow function e il template literal sono utilizzati perfettamente. Lo stesso vale per tutta la sintassi JavaScript.<\/p>\n<h3>4. Organizzazione del codice<\/h3>\n<p>In JavaScript, l&#8217;organizzazione del codice in file separati e la gestione delle dipendenze possono diventare un problema quando la base di codice cresce. TypeScript supporta moduli e namespace che permettono di organizzare meglio il codice.<\/p>\n<p>I moduli permettono di incapsulare il codice all&#8217;interno di file separati, semplificando la gestione e la manutenzione di codebase di grandi dimensioni.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-typescript\">\/\/ greeting.ts:\nexport function greet(name: string): string { \/\/ Export a function from a module\n  return `Hello, ${name}!`;\n}\n\n\/\/ app.ts:\nimport { greet } from \".\/greeting\"; \/\/ Import from a module\n\nconsole.log(greet(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>Nell&#8217;esempio precedente, abbiamo due file separati <strong>greeting.ts<\/strong> e <strong>app.ts<\/strong>. Il file <strong>app.ts<\/strong> importa la funzione <code>greet<\/code> dal file <strong>greeting.ts<\/strong> usando la dichiarazione <code>import<\/code>. Il file <strong>greeting.ts<\/strong> esporta la funzione <code>greet<\/code> utilizzando la parola chiave <code>export<\/code>, rendendola accessibile per l&#8217;importazione in altri file.<\/p>\n<p>Questo consente di migliorare l&#8217;organizzazione del codice e la separazione delle competenze, semplificando la gestione e la manutenzione di grandi basi di codice.<\/p>\n<p>I namespace in TypeScript permettono di raggruppare il codice correlato ed evitare l&#8217;inquinamento del namespace globale. Possono essere utilizzati per definire un container per un insieme di classi, interfacce, funzioni o variabili correlate.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-typescript\">namespace Utilities {\n  export function greet(name: string): string {\n\treturn `Hello, ${name}!`;\n  }\n \n  export function capitalize(str: string): string {\n\treturn str.toUpperCase();\n  }\n}\n\nconsole.log(Utilities.greet(\"John\")); \/\/ Output: Hello, John!\nconsole.log(Utilities.capitalize(\"hello\")); \/\/ Output: HELLO<\/code><\/pre>\n<p>In questo codice, definiamo un <code>namespace Utilities<\/code> che contiene due funzioni, <code>greet<\/code> e <code>capitalize<\/code>. Possiamo accedere a queste funzioni utilizzando il nome del namespace seguito dal nome della funzione, fornendo un raggruppamento logico per il codice correlato.<\/p>\n<h3>5. Caratteristiche della programmazione orientata agli oggetti (OOP)<\/h3>\n<p>TypeScript supporta i concetti della <a href=\"https:\/\/kinsta.com\/it\/blog\/programmazione-orientata-agli-oggetti-python\/\">OOP<\/a> come le classi, le interfacce e l&#8217;ereditariet\u00e0. Ci\u00f2 permette di creare codice strutturato e ben organizzato.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-typescript\">class Person {\n  constructor(public name: string) {} \/\/ Define a class with a constructor\n  greet(): string { \/\/ Define a method in a class\n\treturn `Hello, my name is ${this.name}!`;\n  }\n}\n\nconst john = new Person(\"John\"); \/\/ Create an instance of the class\nconsole.log(john.greet()); \/\/ Output: Hello, my name is John!<\/code><\/pre>\n<h3>6. Type system avanzato<\/h3>\n<p>TypeScript offre un type system avanzato che supporta generics, unions, intersections e altro. Queste caratteristiche migliorano le capacit\u00e0 di controllo statico dei tipi e permette di scrivere codice pi\u00f9 solido ed espressivo.<\/p>\n<p><strong>Generics:<\/strong> i generics permettono di scrivere codice riutilizzabile che pu\u00f2 funzionare con diversi tipi. Sono come dei segnaposto per i tipi che vengono determinati in fase di esecuzione in base ai valori passati a una funzione o a una classe.<\/p>\n<p>Ad esempio, definiamo una funzione generica <code>identity<\/code> che accetta un parametro di tipo <code>T<\/code> e restituisce un valore dello stesso tipo <code>T<\/code>:<\/p>\n<pre><code class=\"language-typescript\">function identity(value: T): T {\n  return value;\n}\n\nlet num: number = identity(10); \/\/ T is inferred as number\nlet str: string = identity(\"hello\"); \/\/ T is inferred as string<\/code><\/pre>\n<p>Nell&#8217;esempio precedente, il tipo <code>T<\/code> viene dedotto in base al tipo di valore passato alla funzione. Nel primo utilizzo della funzione <code>identity<\/code>, <code>T<\/code> viene dedotto come numero perch\u00e9 viene passato <code>10<\/code> come argomento; nel secondo utilizzo, <code>T<\/code> viene dedotto come stringa perch\u00e9 viene passato <code>\"hello\"<\/code> come argomento.<\/p>\n<p><strong>Unions e intersections:<\/strong> le unions e le intersections si usano per comporre i tipi e creare relazioni pi\u00f9 complesse tra tipi.<\/p>\n<p>Le unions permettono di combinare due o pi\u00f9 tipi in un unico tipo che pu\u00f2 assumere uno qualsiasi dei tipi combinati. Le intersections permettono di combinare due o pi\u00f9 tipi in un unico tipo che deve soddisfare tutti i tipi combinati.<\/p>\n<p>Ad esempio, possiamo definire due tipi <code>Employee<\/code> e <code>Manager<\/code>, che rappresentano rispettivamente un dipendente e un manager.<\/p>\n<pre><code class=\"language-typescript\">type Employee = { name: string, role: string };\ntype Manager = { name: string, department: string };<\/code><\/pre>\n<p>Usando i tipi <code>Employee<\/code> e <code>Manager<\/code>, possiamo definire un tipo union <code>EmployeeOrManager<\/code> che pu\u00f2 essere un <code>Employee<\/code> o un <code>Manager<\/code>.<\/p>\n<pre><code class=\"language-typescript\">type EmployeeOrManager = Employee | Manager; \/\/ Union type\n\nlet person1: EmployeeOrManager = { name: \"John\", role: \"Developer\" }; \/\/ Can be either Employee or Manager<\/code><\/pre>\n<p>Nel codice qui sopra, la variabile <code>person1<\/code> \u00e8 di tipo <code>EmployeeOrManager<\/code>, il che significa che le pu\u00f2 essere assegnato un oggetto che soddisfa i tipi <code>Employee<\/code> o <code>Manager<\/code>.<\/p>\n<p>Possiamo anche definire un tipo intersection <code>EmployeeOrManager<\/code> che deve soddisfare entrambi i tipi <code>Employee<\/code> e <code>Manager<\/code>.<\/p>\n<pre><code class=\"language-typescript\">type EmployeeAndManager = Employee & Manager; \/\/ Intersection type\n\nlet person2: EmployeeAndManager = { name: \"Jane\", role: \"Manager\", department: \"HR\" }; \/\/ Must be both Employee and Manager<\/code><\/pre>\n<p>Nel codice precedente, la variabile <code>person2<\/code> \u00e8 di tipo <code>EmployeeAndManager<\/code>, il che significa che deve essere un oggetto che soddisfa entrambi i tipi <code>Employee<\/code> e <code>Manager<\/code>.<\/p>\n<h3>7. Compatibilit\u00e0 con JavaScript<\/h3>\n<p>TypeScript \u00e8 un superset di JavaScript, il che significa che qualsiasi blocco di codice JavaScript valido \u00e8 valido anche per TypeScript. Questo permette di integrare TypeScript in progetti JavaScript senza dover riscrivere tutto.<\/p>\n<p>TypeScript si basa su JavaScript, aggiungendo la tipizzazione statica e altre funzionalit\u00e0, ma consente comunque di utilizzare codice JavaScript.<\/p>\n<p>Ad esempio, un file JavaScript <strong>app.js<\/strong> pu\u00f2 essere rinominato in <strong>app.ts<\/strong> e da qui \u00e8 possibile iniziare a utilizzare gradualmente le funzionalit\u00e0 di TypeScript senza modificare il codice JavaScript esistente. TypeScript sar\u00e0 comunque in grado di comprendere e compilare il codice JavaScript come TypeScript valido.<\/p>\n<p>Ecco un esempio di integrazione tra TypeScript e JavaScript:<\/p>\n<pre><code class=\"language-js\">\/\/ app.js - Existing JavaScript code\nfunction greet(name) {\n  return \"Hello, \" + name + \"!\";\n}\n\nconsole.log(greet(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>Si pu\u00f2 rinominare il file JavaScript qui sopra in <strong>app.ts<\/strong> e iniziare a utilizzare le funzionalit\u00e0 di TypeScript:<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.ts - Same JavaScript code as TypeScript\nfunction greet(name: string): string {\n  return \"Hello, \" + name + \"!\";\n}\n\nconsole.log(greet(\"John\")); \/\/ Output: Hello, John!<\/code><\/pre>\n<p>Nell&#8217;esempio precedente, aggiungiamo un&#8217;annotazione di tipo al parametro name, specificandola come <code>string<\/code>, che \u00e8 opzionale in TypeScript. Il resto del codice rimane uguale a JavaScript. TypeScript \u00e8 in grado di comprendere il codice JavaScript e di eseguire il type checking per l&#8217;annotazione del tipo, cosa che facilita l&#8217;adozione graduale di TypeScript in un progetto JavaScript esistente.<\/p>\n<h2>Iniziare a sviluppare con TypeScript<\/h2>\n<p>TypeScript \u00e8 un compiler che si pu\u00f2 installare in un progetto utilizzando <a href=\"https:\/\/kinsta.com\/it\/blog\/cos-e-npm\/\">npm<\/a>. Basta eseguire il comando che segue nella directory del progetto:<\/p>\n<pre><code class=\"language-bash\">npm install -D typescript<\/code><\/pre>\n<p>Questo comando installer\u00e0 il compiler nella directory <strong>node_modules<\/strong>, che si potr\u00e0 eseguire con il comando <code>npx tsc<\/code>.<\/p>\n<p>Il primo passo \u00e8 inizializzare un progetto node e creare il file package.json utilizzando il seguente comando:<\/p>\n<pre><code class=\"language-bash\">npm init -y<\/code><\/pre>\n<p>Quindi si potr\u00e0 installare la dipendenza TypeScript, creare file TypeScript con estensione <strong>.ts<\/strong> e scrivere codice TypeScript.<\/p>\n<p>Poi bisogner\u00e0 compilare il codice in JavaScript utilizzando il compiler TypeScript (<code>tsc<\/code>). Il comando da eseguire nella directory del progetto sar\u00e0:<\/p>\n<pre><code class=\"language-bash\">npx tsc .ts<\/code><\/pre>\n<p>Questo comando compila il codice TypeScript in JavaScript nel file specificato e genera un file <strong>.js<\/strong> con lo stesso nome.<\/p>\n<p>Si potr\u00e0 quindi eseguire il codice JavaScript compilato nel progetto, proprio come si farebbe con il normale codice JavaScript. Si pu\u00f2 utilizzare Node.js per eseguire il codice JavaScript in un ambiente <a href=\"https:\/\/kinsta.com\/it\/blog\/retribuzione-sviluppatore-node-js\/\">Node.js<\/a> o includere il file JavaScript compilato in un file <a href=\"https:\/\/kinsta.com\/it\/blog\/html\/\">HTML<\/a> ed eseguirlo in un browser.<\/p>\n<h2>Lavorare con le interfacce<\/h2>\n<p>In TypeScript si usano le interfacce per definire contratti o la forma degli oggetti. Permettono di specificare la struttura o la forma che un oggetto deve rispettare.<\/p>\n<p>Le interfacce definiscono un insieme di propriet\u00e0 e\/o metodi che un oggetto deve avere per essere considerato compatibile con l&#8217;interfaccia. Possono inoltre essere utilizzate per fornire annotazioni sul tipo per oggetti, parametri di funzione e valori di ritorno, offrendo un maggiore controllo statico del tipo e suggerimenti per il completamento del codice negli <a href=\"https:\/\/kinsta.com\/it\/blog\/editor-php\/\">IDE<\/a>.<\/p>\n<p>Ecco un esempio di interfaccia in TypeScript:<\/p>\n<pre><code class=\"language-typescript\">interface Person {\n  firstName: string;\n  lastName: string;\n  age: number;\n}<\/code><\/pre>\n<p>In questo esempio, definiamo un&#8217;interfaccia <code>Person<\/code> che specifica tre propriet\u00e0: <code>firstName<\/code> di tipo <code>string<\/code>, <code>lastName<\/code> di tipo <code>string<\/code> e <code>age<\/code> di tipo <code>number<\/code>.<\/p>\n<p>Qualsiasi oggetto che abbia queste tre propriet\u00e0 con i tipi specificati sar\u00e0 considerato compatibile con l&#8217;interfaccia <code>Person<\/code>. Definiamo ora gli oggetti conformi all&#8217;interfaccia <code>Person<\/code>:<\/p>\n<pre><code class=\"language-typescript\">let person1: Person = {\n  firstName: \"John\",\n  lastName: \"Doe\",\n  age: 30\n};\n\nlet person2: Person = {\n  firstName: \"Jane\",\n  lastName: \"Doe\",\n  age: 25\n};<\/code><\/pre>\n<p>In questo esempio, abbiamo creato due oggetti <code>person1<\/code> e <code>person2<\/code> conformi all&#8217;interfaccia <code>Person<\/code>. Entrambi gli oggetti hanno le propriet\u00e0 richieste <code>firstName<\/code>, <code>lastName<\/code> e <code>age<\/code> con i tipi specificati, quindi sono compatibili con l&#8217;interfaccia <code>Person<\/code>.<\/p>\n<h3>Estendere le interfacce<\/h3>\n<p>Le interfacce possono essere estese per creare nuove interfacce che ereditano propriet\u00e0 da quelle esistenti.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-typescript\">interface Animal {\n  name: string;\n  sound: string;\n}\n\ninterface Dog extends Animal {\n  breed: string;\n}\n\nlet dog: Dog = {\n  name: \"Buddy\",\n  sound: \"Woof\",\n  breed: \"Labrador\"\n};<\/code><\/pre>\n<p>In questo esempio, definiamo l&#8217;interfaccia <code>Animal<\/code> con le propriet\u00e0 <code>name<\/code> e <code>sound<\/code>, e poi definiamo una nuova interfaccia &#8220;Dog&#8221; che estende l&#8217;interfaccia <code>Animal<\/code> e aggiunge una nuova propriet\u00e0 <code>breed<\/code>. L&#8217;interfaccia <code>Dog<\/code> eredita le propriet\u00e0 dall&#8217;interfaccia <code>Animal<\/code>, quindi qualsiasi oggetto conforme all&#8217;interfaccia <code>Dog<\/code> deve avere anche le propriet\u00e0 <code>name<\/code> e <code>sound<\/code>.<\/p>\n<h3>Propriet\u00e0 opzionali<\/h3>\n<p>Le interfacce possono avere anche delle propriet\u00e0 opzionali, indicate da un <code>?<\/code> dopo il nome della propriet\u00e0.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-typescript\">interface Car {\n  make: string;\n  model: string;\n  year?: number;\n}\n\nlet car1: Car = {\n  make: \"Toyota\",\n  model: \"Camry\"\n};\n\nlet car2: Car = {\n  make: \"Honda\",\n  model: \"Accord\",\n  year: 2020\n};<\/code><\/pre>\n<p>In questo esempio, abbiamo definito un&#8217;interfaccia <code>Car<\/code> con le propriet\u00e0 <code>make<\/code> e <code>model<\/code> e una propriet\u00e0 opzionale <code>year<\/code>. La propriet\u00e0 <code>year<\/code> non \u00e8 obbligatoria, quindi gli oggetti conformi all&#8217;interfaccia <code>Car<\/code> possono averla o meno.<\/p>\n<h2>Type checking avanzato<\/h2>\n<p>TypeScript fornisce anche opzioni avanzate per il type checking nel file <strong>tsconfig.json<\/strong>. Queste opzioni possono migliorare le capacit\u00e0 di type checking di un progetto TypeScript e permettere di individuare pssibili errori in fase di compilazione, ottenendo un codice pi\u00f9 affidabile.<\/p>\n<h3>1. strictNullChecks<\/h3>\n<p>Se impostato su <code>true<\/code>, TypeScript applica controlli null rigorosi, il che significa che le variabili non possono avere un valore <code>null<\/code> o <code>undefined<\/code>, a meno che non siano esplicitamente specificate con il tipo di unione di <code>null<\/code> o <code>undefined<\/code>.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n\t\"strictNullChecks\": true\n  }\n}<\/code><\/pre>\n<p>Se si abilita questa opzione, TypeScript catturer\u00e0 i possibili valori di <code>null<\/code> o <code>undefined<\/code> in fase di compilazione, prevenendo errori di runtime causati dall&#8217;accesso a propriet\u00e0 o metodi su variabili <code>null<\/code> o <code>undefined<\/code>.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Example 1: Error - Object is possibly 'null'\nlet obj1: { prop: string } = null;\nconsole.log(obj1.prop);\n\n\/\/ Example 2: Error - Object is possibly 'undefined'\nlet obj2: { prop: string } = undefined;\nconsole.log(obj2.prop);<\/code><\/pre>\n<h3>2. strictFunctionTypes<\/h3>\n<p>Se questa opzione \u00e8 impostata su <code>true<\/code>, TypeScript abilita il controllo rigoroso dei tipi delle funzioni, compresa la bivarianza dei parametri di funzione. Questo fa s\u00ec che la compatibilit\u00e0 dei tipi degli argomenti delle funzioni sia controllata rigorosamente.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n\t\"strictFunctionTypes\": true\n  }\n}<\/code><\/pre>\n<p>Abilitando questa opzione, in fase di compilazione TypeScript individuer\u00e0 le possibili discrepanze tra i tipi di parametri delle funzioni, prevenendo errori di runtime causati dal passaggio di argomenti errati.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Example: Error - Argument of type 'number' is not assignable to parameter of type 'string'\nfunction greet(name: string) {\n  console.log(`Hello, ${name}!`);\n}\n\ngreet(123);<\/code><\/pre>\n<h3>3. noImplicitThis<\/h3>\n<p>Impostando questa opzione su <code>true<\/code>, TypeScript non consentir\u00e0 l&#8217;utilizzo di <code>this<\/code> con un tipo implicito <code>any<\/code>, il che aiuta a individuare errori quando si usa <code>this<\/code> nei metodi delle classi.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n\t\"noImplicitThis\": true\n  }\n}<\/code><\/pre>\n<p>Abilitando questa opzione, TypeScript individuer\u00e0 i possibili errori causati dall&#8217;utilizzo di <code>this<\/code> senza annotazioni di tipo o binding adeguati nei metodi di classe.<\/p>\n<pre><code class=\"language-typescript\">\/\/ Example: Error - The 'this' context of type 'void' is not assignable to method's 'this' of type 'MyClass'\nclass MyClass {\n  private prop: string;\n\n  constructor(prop: string) {\n\tthis.prop = prop;\n  }\n\n  printProp() {\n\tconsole.log(this.prop);\n  }\n}\n\nlet obj = new MyClass(\"Hello\");\nsetTimeout(obj.printProp, 1000); \/\/ 'this' context is lost, potential error<\/code><\/pre>\n<h3>4. target<\/h3>\n<p>L&#8217;opzione <code>target<\/code> specifica la versione di destinazione di ECMAScript del codice TypeScript, il che vuol dire che stabilisce la versione di JavaScript che il compiler TypeScript deve generare come output.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n\t\"target\": \"ES2018\"\n  }\n}<\/code><\/pre>\n<p>Assegnando il valore &#8220;<strong>ES2018<\/strong>&#8220;, TypeScript generer\u00e0 codice JavaScript conforme allo standard ECMAScript 2018.<\/p>\n<p>Questo pu\u00f2 essere utile se si desidera sfruttare le ultime funzionalit\u00e0 e la sintassi pi\u00f9 recente di JavaScript, ma sar\u00e0 necessario anche garantire la retrocompatibilit\u00e0 con gli ambienti JavaScript pi\u00f9 vecchi.<\/p>\n<h3>5. module<\/h3>\n<p>L&#8217;opzione <code>module<\/code> specifica il sistema di moduli da utilizzare nel codice TypeScript. Le opzioni pi\u00f9 utilizzate sono &#8220;<strong>CommonJS<\/strong>&#8220;,&#8221;<strong>AMD<\/strong>&#8220;, &#8220;<strong>ES6<\/strong>&#8220;, &#8220;<strong>ES2015<\/strong>&#8220;, ecc. Questo stabilisce il modo in cui i moduli di TypeScript vengono compilati in moduli JavaScript.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n\t\"module\": \"ES6\"\n  }\n}<\/code><\/pre>\n<p>Se l&#8217;opzione \u00e8 impostata su &#8220;<strong>ES6<\/strong>&#8220;, TypeScript generer\u00e0 un codice JavaScript che usa la sintassi dei moduli ECMAScript 6.<\/p>\n<p>Pu\u00f2 essere utile se si sta lavorando con un ambiente JavaScript moderno che supporta i moduli ECMAScript 6, per esempio in un&#8217;applicazione front-end che utilizza un bundler di moduli come webpack o Rollup.<\/p>\n<h3>6. noUnusedLocals e noUnusedParameters<\/h3>\n<p>Queste opzioni permettono a TypeScript di catturare rispettivamente le variabili locali e i parametri delle funzioni non utilizzati.<\/p>\n<p>Se impostato su <code>true<\/code>, TypeScript emetter\u00e0 errori di compilazione per qualsiasi variabile locale o parametro di funzione dichiarato ma non utilizzato nel codice.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code class=\"language-json\">{\n  \"compilerOptions\": {\n\t\"noUnusedLocals\": true,\n\t\"noUnusedParameters\": true\n  }\n}<\/code><\/pre>\n<p>Questi sono solo alcuni esempi di opzioni avanzate di type checking che \u00e8 possibile impostare nel file <strong>tsconfig.json<\/strong> di TypeScript. Si legga la <a href=\"https:\/\/www.typescriptlang.org\/tsconfig\">documentazione ufficiale per saperne di pi\u00f9<\/a>.<\/p>\n<h2>Best practice e suggerimenti per utilizzare al meglio TypeScript<\/h2>\n<h3>1. Annotare correttamente i tipi per le variabili, i parametri delle funzioni e i valori restituiti<\/h3>\n<p>Uno dei vantaggi principali di TypeScript \u00e8 la disponibilit\u00e0 di un solido sistema di tipizzazione, che permette di specificare esplicitamente tipi di variabili, parametri di funzione e valori restituiti.<\/p>\n<p>Questo migliora la leggibilit\u00e0 del codice, individua tempestivamente possibili errori legati al tipo e consente di completare in modo intelligente il codice negli IDE.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Properly annotating variable types\nlet age: number = 25;\nlet name: string = \"John\";\nlet isStudent: boolean = false;\nlet scores: number[] = [98, 76, 89];\nlet person: { name: string, age: number } = { name: \"John\", age: 25 };\n\n\/\/ Properly annotating function parameter and return types\nfunction greet(name: string): string {\n  return \"Hello, \" + name;\n}\n\nfunction add(a: number, b: number): number {\n  return a + b;\n}<\/code><\/pre>\n<h3>2. Funzionalit\u00e0 avanzate di TypeScript<\/h3>\n<p>TypeScript \u00e8 dotato di un ricco set di funzionalit\u00e0 avanzate per i tipi, come generics, unions, intersections, conditional types e mapped types. Queste possono aiutarvi a scrivere codice pi\u00f9 flessibile e riutilizzabile.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Using generics to create a reusable function\nfunction identity(value: T): T {\n  return value;\n}\n\nlet num: number = identity(42); \/\/ inferred type: number\nlet str: string = identity(\"hello\"); \/\/ inferred type: string\n\n\/\/ Using union types to allow multiple types\nfunction display(value: number | string): void {\n  console.log(value);\n}\n\ndisplay(42); \/\/ valid\ndisplay(\"hello\"); \/\/ valid\ndisplay(true); \/\/ error<\/code><\/pre>\n<h3>3. Scrivere codice mantenibile e scalabile con TypeScript<\/h3>\n<p>TypeScript permette di scrivere codice mantenibile e scalabile grazie a interfacce, classi e moduli.<\/p>\n<p>Ecco un esempio:<\/p>\n<pre><code class=\"language-typescript\">\/\/ Using interfaces for defining contracts\ninterface Person {\n  name: string;\n  age: number;\n}\n\nfunction greet(person: Person): string {\n  return \"Hello, \" + person.name;\n}\n\nlet john: Person = { name: \"John\", age: 25 };\nconsole.log(greet(john)); \/\/ \"Hello, John\"\n\n\/\/ Using classes for encapsulation and abstraction\nclass Animal {\n  constructor(private name: string, private species: string) {}\n\n  public makeSound(): void {\n\tconsole.log(\"Animal is making a sound\");\n  }\n}\n\nclass Dog extends Animal {\n  constructor(name: string, breed: string) {\n\tsuper(name, \"Dog\");\n\tthis.breed = breed;\n  }\n\n  public makeSound(): void {\n\tconsole.log(\"Dog is barking\");\n  }\n}\n\nlet myDog: Dog = new Dog(\"Buddy\", \"Labrador\");\nmyDog.makeSound(); \/\/ \"Dog is barking\"<\/code><\/pre>\n<h3>4. Strumenti e supporto di TypeScript negli IDE<\/h3>\n<p>TypeScript dispone di eccellenti strumenti di supporto negli IDE, con funzioni quali l&#8217;autocompletamento, la type inference, il refactoring e il controllo degli errori.<\/p>\n<p>Queste funzionalit\u00e0 permettono di aumentare la produttivit\u00e0 e individuare possibili errori nelle prime fasi dello sviluppo. Ci sono ottimi IDE compatibili con TypeScript, come Visual Studio Code, e basta installare il <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode.vscode-typescript-next\">plugin TypeScript<\/a> per avere una migliore esperienza di editing del codice.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/04\/vscode-extension-typescript.jpg\" alt=\"Schermata dell\u2019estensione VS Code TypeScript\" width=\"1600\" height=\"877\"><figcaption class=\"wp-caption-text\">Estensione VS Code TypeScript<\/figcaption><\/figure>\n\n<h2>Riepilogo<\/h2>\n<p>TypeScript offre un grande ventaglio di potenti funzionalit\u00e0 che possono migliorare notevolmente i progetti di sviluppo web.<\/p>\n<p>Grazie alla tipizzazione statica forte, al sistema di tipi avanzato e alle capacit\u00e0 di programmazione orientata agli oggetti, \u00e8 uno strumento prezioso per scrivere codice solido, mantenibile e scalabile. Il tooling e il supporto di TypeScript da parte degli IDE migliorano notevolmente l&#8217;esperienza di sviluppo.<\/p>\n<p>Se volete esplorare TypeScript e le sue funzionalit\u00e0, potete farlo oggi stesso grazie all&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni di Kinsta.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel frenetico panorama digitale di oggi, JavaScript \u00e8 diventato il linguaggio di riferimento per la creazione di applicazioni web dinamiche. Tuttavia, la tipizzazione dinamica di JavaScript &#8230;<\/p>\n","protected":false},"author":287,"featured_media":69407,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[25847],"class_list":["post-69406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-tutorial-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cos&#039;\u00e8 TypeScript? La Guida Completa - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Scopri tutto quello che c&#039;\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/typescript\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cos&#039;\u00e8 TypeScript? Guida completa\" \/>\n<meta property=\"og:description\" content=\"Scopri tutto quello che c&#039;\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/typescript\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-24T10:59:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:43:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Scopri tutto quello che c&#039;\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Cos&#8217;\u00e8 TypeScript? Guida completa\",\"datePublished\":\"2023-05-24T10:59:36+00:00\",\"dateModified\":\"2025-10-01T19:43:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/\"},\"wordCount\":2693,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/typescript\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/\",\"name\":\"Cos'\u00e8 TypeScript? La Guida Completa - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg\",\"datePublished\":\"2023-05-24T10:59:36+00:00\",\"dateModified\":\"2025-10-01T19:43:45+00:00\",\"description\":\"Scopri tutto quello che c'\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/typescript\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/typescript\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial JavaScript\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/tutorial-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cos&#8217;\u00e8 TypeScript? Guida completa\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cos'\u00e8 TypeScript? La Guida Completa - Kinsta\u00ae","description":"Scopri tutto quello che c'\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/typescript\/","og_locale":"it_IT","og_type":"article","og_title":"Cos'\u00e8 TypeScript? Guida completa","og_description":"Scopri tutto quello che c'\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.","og_url":"https:\/\/kinsta.com\/it\/blog\/typescript\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-05-24T10:59:36+00:00","article_modified_time":"2025-10-01T19:43:45+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg","type":"image\/jpeg"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Scopri tutto quello che c'\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Joel Olawanle","Tempo di lettura stimato":"17 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Cos&#8217;\u00e8 TypeScript? Guida completa","datePublished":"2023-05-24T10:59:36+00:00","dateModified":"2025-10-01T19:43:45+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/"},"wordCount":2693,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/typescript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/","url":"https:\/\/kinsta.com\/it\/blog\/typescript\/","name":"Cos'\u00e8 TypeScript? La Guida Completa - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg","datePublished":"2023-05-24T10:59:36+00:00","dateModified":"2025-10-01T19:43:45+00:00","description":"Scopri tutto quello che c'\u00e8 da sapere su TypeScript in questa guida completa: scopriamo caratteristiche, vantaggi e best practice.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/typescript\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/05\/what-is-typescript.jpeg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/typescript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Tutorial JavaScript","item":"https:\/\/kinsta.com\/it\/argomenti\/tutorial-javascript\/"},{"@type":"ListItem","position":3,"name":"Cos&#8217;\u00e8 TypeScript? Guida completa"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/it\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/69406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=69406"}],"version-history":[{"count":14,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/69406\/revisions"}],"predecessor-version":[{"id":76084,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/69406\/revisions\/76084"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/69406\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/69407"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=69406"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=69406"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=69406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}