Menu

Tipi in TypeScript: string, number, boolean e altri

I tipi predefiniti di TypeScript: string, number, boolean, bigint, symbol, null e undefined, più array e oggetti in breve. Come si scrive un'annotazione di tipo, perché non esiste un tipo intero e perché si scrive string invece di String.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

I tipi di TypeScript descrivono che tipo di valore può contenere una variabile. Scrivi un tipo dopo i due punti, let name: string, e il compilatore rifiuta qualsiasi codice che ci metta un valore del tipo sbagliato. I tipi di base sono i sette primitivi di JavaScript più i tipi oggetto per array e oggetti.

Le annotazioni vengono controllate in compilazione e poi rimosse. Il programma che viene eseguito è JavaScript semplice.

I tipi primitivi

TipoValori di esempioNote
string"hi", 'hi', `hi ${name}`Testo. I tre stili di virgolette hanno lo stesso tipo.
number42, 3.14, -0.5, NaN, InfinityQualsiasi numero, intero o no. Non esistono int o float.
booleantrue, falseSolo questi due valori.
bigint10n, BigInt(10)Interi di qualsiasi dimensione. Richiede target ES2020 o successivo.
symbolSymbol("id")Un valore unico, usato soprattutto come chiave di un oggetto.
nullnull"Vuoto di proposito".
undefinedundefined"Non impostato". È anche ciò che si legge da una proprietà mancante.

I nomi dei tipi sono minuscoli. typeof a runtime restituisce le stesse parole per la maggior parte di essi, quindi typeof x === "number" è il modo per controllare il tipo primitivo di un valore mentre il programma è in esecuzione.

Annotazioni di tipo

Un'annotazione è : Type dopo una variabile, un parametro o l'elenco dei parametri di una funzione. I parametri sono il punto in cui le annotazioni contano di più, perché TypeScript non può indovinare cosa passerà chi chiama.

Quando una variabile viene inizializzata sulla stessa riga, l'annotazione di solito è superflua: let count = 10 ha già il tipo number. Le regole per omettere i tipi sono nella pagina sull'inferenza dei tipi.

Un tipo sbagliato è un errore di compilazione

Assegna un valore del tipo sbagliato e il compilatore si ferma prima che venga eseguito qualsiasi cosa:

Il compilatore stampa:

index.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'.

La soluzione è convertire il valore, port = Number("3000"), o cambiare l'annotazione se la variabile deve davvero contenere testo.

number: non esiste un tipo intero

JavaScript memorizza ogni numero come valore in virgola mobile a 64 bit, quindi TypeScript ha un solo tipo number. Gli interi sono esatti fino a Number.MAX_SAFE_INTEGER (2 ** 53 - 1). Oltre quel limite, usa bigint.

bigint e number non si mescolano: exact + 1 è un errore di compilazione (TS2365: Operator '+' cannot be applied to types 'bigint' and '1'., dove '1' è il tipo letterale di 1) e, se mai venisse eseguito, anche un TypeError a runtime. Converti esplicitamente uno dei due lati con BigInt(1) o Number(exact), sapendo che Number arrotonda i valori oltre l'intervallo sicuro.

Se vuoi un tipo che accetti solo numeri interi, TypeScript non può esprimerlo per valori arbitrari. Valida con Number.isInteger nel punto in cui il valore entra nel programma.

boolean

boolean ha esattamente due valori, true e false. I valori che sono solo truthy (1, "yes") non sono booleani, quindi trasformali in uno con Boolean(x) o x !== 0.

null e undefined

Con strict attivo (il predefinito da TypeScript 6.0), null e undefined sono tipi separati e non fanno parte di string, number o di qualsiasi altro tipo. Una variabile che può essere vuota lo dichiara con una union:

Leggere una proprietà di un valore che potrebbe essere undefined è un errore di compilazione finché non lo controlli. La pagina su null e undefined tratta i controlli, ?. e ??.

Array e oggetti in breve

Tutto ciò che non è un primitivo è un tipo oggetto. Le tre forme che incontri per prime:

let tags: string[] = ["ts", "js"];               // array of strings
let point: { x: number; y: number } = { x: 1, y: 2 }; // object with two number properties
let greet: (name: string) => string = (n) => `hi ${n}`; // function type

Ognuna ha la sua pagina: array, tuple (array a lunghezza fissa), tipi oggetto e tipi funzione.

string, number, boolean vs String, Number, Boolean

I nomi con la maiuscola sono i tipi degli oggetti wrapper di JavaScript (new String("x")), non dei valori normali. Annota con i nomi minuscoli.

index.ts(3,7): error TS2322: Type 'String' is not assignable to type 'string'.
  'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

Cambia String in string sulla prima riga e il blocco viene eseguito. Lo stesso vale per Number, Boolean, Symbol e BigInt. (Object è un caso a parte: accetta quasi qualsiasi valore, primitivi inclusi; vedi i tipi oggetto.)

Altri tipi predefiniti

Alcuni altri tipi compaiono presto. Ognuno ha la sua pagina.

TipoSignificato
anyDisattiva i controlli per quel valore. Evitalo.
unknownQualsiasi valore, ma devi controllarlo prima di usarlo.
voidUna funzione non restituisce nulla di utile.
neverNessun valore: una funzione che lancia sempre un errore, o un caso impossibile.
objectQualsiasi valore non primitivo.
"red" | "green"Un tipo letterale: solo questi valori esatti.

Domande frequenti

TypeScript ha un tipo intero?

No. number copre sia gli interi sia i decimali, perché JavaScript memorizza ogni numero come float a 64 bit. Controlla a runtime se un numero è intero con Number.isInteger(n), e usa bigint (10n) quando ti servono interi più grandi di Number.MAX_SAFE_INTEGER (2 ** 53 - 1) senza perdere precisione.

Che differenza c'è tra string e String in TypeScript?

string è il tipo primitivo, quello che hanno i letterali stringa e le template string. String è il tipo dell'oggetto wrapper creato da new String("x"). Annota sempre con i minuscoli string, number e boolean; assegnare una String a una string è un errore di compilazione (TS2322).

Quali sono i tipi primitivi in TypeScript?

Gli stessi sette di JavaScript: string, number, boolean, bigint, symbol, null e undefined. Tutto il resto (array, oggetti, funzioni, istanze di classi) è un tipo oggetto.

Come si dichiara una variabile con un tipo in TypeScript?

Metti i due punti e il tipo dopo il nome: let count: number = 0;. Per una funzione, annota ogni parametro e, se vuoi, il tipo di ritorno: function add(a: number, b: number): number. Quando una variabile viene inizializzata, di solito puoi omettere l'annotazione e lasciare che TypeScript la deduca.

I tipi di TypeScript esistono a runtime?

No. Il compilatore controlla i tipi e poi li rimuove, quindi il JavaScript che viene eseguito non ha annotazioni. A runtime controlli i valori con operatori JavaScript come typeof, Array.isArray e instanceof.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA