Menu
Coddy logo textTech

TypeScript Cheat Sheet

Ultimo aggiornamento

Tipi base

I tipi primitivi e come annotare le variabili.

OperazioneSintassi
Stringalet name: string = "Ada";
Numerolet age: number = 25;
Booleanolet ok: boolean = true;
Array di Tlet xs: number[] = [1, 2, 3];
Array genericolet xs: Array<string> = [];
Tuplalet pair: [string, number] = ["a", 1];
Any (disattiva la tipizzazione)let x: any = 1;
Unknown (any più sicuro)let x: unknown = JSON.parse(s);
Void (nessun ritorno)function log(): void { … }
Never (non ritorna mai)function fail(): never { throw … }
Null / undefinedlet n: null = null;

Inferenza e annotazioni di tipo

Quando lasciare che TS deduca il tipo e quando annotarlo.

OperazioneSintassi
Dedotto dal valorelet count = 0; // number
Annotazione esplicitalet count: number = 0;
Parametro di funzionefunction add(a: number, b: number) { … }
Tipo di ritornofunction add(a: number, b: number): number { … }
Arrow functionconst sq = (x: number): number => x * x;
Asserzione di tipoconst el = input as HTMLInputElement;
Const assertion (letterale)const dirs = ["up", "down"] as const;
Asserzione non nullel!.focus();

Interfacce

Descrivono la forma di un oggetto.

OperazioneSintassi
Dichiarareinterface User { id: number; name: string; }
Proprietà opzionaleinterface User { age?: number; }
Proprietà di sola letturainterface User { readonly id: number; }
Firma di metodointerface Logger { log(msg: string): void; }
Estendere un'altra interfacciainterface Admin extends User { role: string; }
Firma di indiceinterface Map { [key: string]: number; }
Implementare in una classeclass Db implements Logger { … }

Alias di tipo e union

Dai un nome a un tipo e combina tipi con | e &.

OperazioneSintassi
Alias di tipotype ID = string | number;
Alias di tipo oggettotype User = { id: number; name: string };
Tipo uniontype Status = "idle" | "loading" | "done";
Tipo intersezionetype Admin = User & { role: string };
Tipo letteraletype Yes = "yes";
Nullabletype Maybe<T> = T | null | undefined;
Alias di tipo funzionetype Handler = (e: Event) => void;

Funzioni

Parametri tipizzati, valori di ritorno e overload.

OperazioneSintassi
Parametro opzionalefunction greet(name?: string) { … }
Parametro predefinitofunction greet(name = "friend") { … }
Parametri restfunction sum(...ns: number[]): number { … }
Tipo funzionelet fn: (a: number) => number;
Interfaccia richiamabileinterface Fn { (x: number): number; }
Firme di overloadfunction f(x: string): string; function f(x: number): number; function f(x: any) { return x; }
Ritorno void ignoratoconst cb: () => void = () => 42; // ok

Classi

Classi con modificatori di accesso e parameter properties.

OperazioneSintassi
Dichiarare una classeclass User { name: string; }
Costruttoreconstructor(name: string) { this.name = name; }
Parameter propertyconstructor(public name: string) {}
Public / private / protectedprivate id: number;
Campo readonlyreadonly id: number;
Membro staticostatic count = 0;
Getter / setterget name() { return this._name; }
Ereditarietàclass Admin extends User { … }
Classe astrattaabstract class Shape { abstract area(): number; }

Generics

Tipi riutilizzabili parametrizzati da altri tipi.

OperazioneSintassi
Funzione genericafunction id<T>(x: T): T { return x; }
Chiamata con tipo esplicitoid<string>("hi");
Interfaccia genericainterface Box<T> { value: T; }
Alias di tipo genericotype Pair<A, B> = [A, B];
Classe genericaclass Stack<T> { items: T[] = []; }
Vincolo con extendsfunction len<T extends { length: number }>(x: T) { return x.length; }
Parametro di tipo predefinitointerface Box<T = string> { value: T; }
Operatore keyoftype K = keyof User; // "id" | "name"
Tipo di accesso per indicetype Name = User["name"];

Narrowing

Restringe una union a un solo tipo in fase di esecuzione.

OperazioneSintassi
Controllo con typeofif (typeof x === "string") { … }
Controllo con instanceofif (e instanceof Error) { … }
Operatore inif ("name" in obj) { … }
Narrowing per uguaglianzaif (status === "done") { … }
Truthinessif (value) { … }
Type guard personalizzatofunction isUser(x: any): x is User { return "id" in x; }
Union discriminatatype Shape = { kind: "sq"; size: number } | { kind: "ci"; r: number };
Esaustività con neverconst _: never = shape;

Enum

Insiemi di costanti con nome.

OperazioneSintassi
Enum numericoenum Direction { Up, Down, Left, Right }
Enum di stringheenum Status { Idle = "IDLE", Done = "DONE" }
Usare un valorelet d: Direction = Direction.Up;
Const enum (inserito inline)const enum Color { Red, Green, Blue }
Union di letterali (moderno)type Status = "idle" | "done";

Utility types

Helper integrati che trasformano tipi esistenti.

OperazioneSintassi
Rendere opzionali tutte le proprietàPartial<User>
Rendere obbligatorie tutte le proprietàRequired<User>
Rendere readonly tutte le proprietàReadonly<User>
Scegliere un sottoinsieme di chiaviPick<User, "id" | "name">
Omettere una o più chiaviOmit<User, "password">
Oggetto con chiavi specificateRecord<string, number>
Escludere da una unionExclude<"a" | "b" | "c", "a">
Estrarre da una unionExtract<"a" | "b", "a" | "c">
Rimuovere null / undefinedNonNullable<string | null>
Tipo di ritorno di una funzioneReturnType<typeof fn>
Tupla dei parametri di una funzioneParameters<typeof fn>
Tipo risolto di una promiseAwaited<Promise<string>>

Moduli

Importare ed esportare tra file.

OperazioneSintassi
Export con nomeexport function add(a: number, b: number) { … }
Export predefinitoexport default class User { … }
Riesportareexport { User } from "./user";
Import con nomeimport { add } from "./math";
Import predefinitoimport User from "./user";
Importare solo un tipoimport type { User } from "./user";
Importare tuttoimport * as math from "./math";
Riferimento a tripla barra/// <reference types="node" />

Le basi di tsconfig

Le opzioni del compilatore che vale la pena conoscere.

OpzioneEffetto
"strict": trueAttiva tutti i controlli della modalità strict (consigliato).
"target": "ES2022"Versione di JavaScript generata da tsc.
"module": "ESNext"Sistema di moduli nell'output generato.
"moduleResolution": "bundler"Risolve i moduli come fanno i bundler moderni.
"jsx": "react-jsx"Abilita JSX per React 17+.
"esModuleInterop": trueImport predefiniti più puliti dai moduli CommonJS.
"skipLibCheck": trueSalta il controllo dei tipi in node_modules (build più veloci).
"noEmit": trueSolo controllo dei tipi: lascia la generazione del codice al bundler.

La sintassi TypeScript che usi più spesso, in una sola pagina. Questa TypeScript cheat sheet è un riferimento rapido per il TS di tutti i giorni: tipi base, interfacce, alias di tipo, generics, union, narrowing e gli utility types integrati. Dato che TypeScript si basa su JavaScript, tieni a portata di mano la JavaScript cheat sheet per la sintassi di base.

Tutto quello che trovi qui è TypeScript standard che compila con tsc e funziona ovunque giri JavaScript moderno. Copia ciò che ti serve o prova qualsiasi snippet dal vivo nel playground TypeScript, senza installare nulla. Sei alle prime armi con i tipi? Il corso TypeScript interattivo e gratuito di Coddy te li presenta partendo da JavaScript.

Domande frequenti sulla TypeScript cheat sheet

Questa TypeScript cheat sheet è gratuita?
Sì. Questa TypeScript cheat sheet è completamente gratuita e non richiede registrazione. Salvala nei preferiti e torna qui ogni volta che devi cercare un tipo, un'interfaccia o un utility type.
Qual è la differenza tra un'interfaccia e un alias di tipo?
Entrambi possono descrivere la forma di un oggetto e, nella maggior parte dei casi quotidiani, sono intercambiabili. Le interfacce possono essere riaperte ed estese tra più file (declaration merging), cosa utile per i tipi delle librerie. Gli alias di tipo possono dare un nome a union, intersezioni, tuple e mapped types: forme che non puoi esprimere con interface. Una regola comune: usa interface per le forme pubbliche degli oggetti e type per union, tuple e tipi calcolati.
Qual è la differenza tra any e unknown?
any disattiva completamente il controllo dei tipi: il compilatore ti lascia fare qualsiasi cosa. unknown è sicuro: devi restringerlo (con typeof, instanceof o un type guard) prima di poterlo usare. Preferisci unknown per i valori provenienti da fonti esterne come JSON.parse o fetch: ti obbliga a validarli prima dell'uso.
Devo imparare JavaScript prima di TypeScript?
Sì: TypeScript è JavaScript con un sistema di tipi aggiunto sopra, quindi ogni competenza JavaScript resta valida. Se stai ancora costruendo le basi di JS (array, oggetti, async/await), la JavaScript cheat sheet è un buon punto di partenza e il corso JavaScript gratuito di Coddy copre gli stessi argomenti in modo interattivo.
Posso esercitarmi con TypeScript online?
Sì. Apri il playground TypeScript per eseguire nel browser qualsiasi snippet di questa cheat sheet, senza installare nulla. Quando vuoi un percorso strutturato, impara con il corso JavaScript e applica sopra i tipi di questa pagina.
Illustrazione dei linguaggi di programmazione di Coddy

Impara TypeScript con Coddy

INIZIA