TypeScript - Tipi Letterali: Una Guida per Principianti

Ciao, futuro supercampione del coding! Oggi ci immergeremo nel mondo emozionante dei Tipi Letterali di TypeScript. Non preoccuparti se sei nuovo alla programmazione - sarò il tuo guida amichevole in questa avventura. Alla fine di questo tutorial, sarai in grado di utilizzare i tipi letterali come un professionista!

TypeScript - Literal Types

Cos'è un Tipo Letterale?

Prima di immergerci, immaginiamo che stai ordinando una pizza. Non puoi solo dire, "Voglio una pizza." Devi specificare la taglia: piccola, media o grande. In TypeScript, i tipi letterali sono come quelle specifiche taglie di pizza - sono valori esatti che una variabile può avere.

Sintassi

La sintassi per i tipi letterali è semplice. Usa semplicemente il valore esatto che vuoi permettere. Guardiamo un esempio di base:

let pizzaSize: "small" | "medium" | "large";

In questo caso, pizzaSize può essere solo "small", "medium" o "large". Null'altro è permesso - neanche "extra large" o "minuscola"!

Tipi Letterali Stringa

I tipi letterali stringa sono i più comuni e facili da capire. Sono esattamente come sembrano - stringhe specifiche che una variabile può essere.

Esempio 1: Giorni della Settimana

type DayOfWeek = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday";

let today: DayOfWeek = "Monday";
today = "Friday"; // Questo va bene
today = "Someday"; // Errore! Il tipo '"Someday"' non è assegnabile al tipo 'DayOfWeek'.

In questo esempio, DayOfWeek è un tipo che può essere solo uno dei sette giorni della settimana. Prova a assegnare qualsiasi altra stringa, e TypeScript ti farà notare l'errore!

Esempio 2: Colori dei Semafori

type TrafficLightColor = "Red" | "Yellow" | "Green";

function changeLight(color: TrafficLightColor) {
console.log(`La luce è cambiata a ${color}`);
}

changeLight("Green"); // Funziona bene
changeLight("Purple"); // Errore! L'argomento di tipo '"Purple"' non è assegnabile al parametro di tipo 'TrafficLightColor'.

Qui, stiamo assicurando che il nostro semaforo possa cambiare solo a colori validi. Nessun lume di discoteca su questa strada!

Tipi Letterali Numerici

Come con le stringhe, possiamo creare tipi letterali con numeri. Questo è ottimo quando vuoi limitare un valore a specifici numeri.

Esempio 3: Lanci di Dado

type DiceRoll = 1 | 2 | 3 | 4 | 5 | 6;

function rollDice(): DiceRoll {
return Math.floor(Math.random() * 6) + 1 as DiceRoll;
}

let myRoll = rollDice();
console.log(`Hai lanciato un ${myRoll}`);

In questo esempio, stiamo assicurando che il nostro dado possa solo lanciare numeri da 1 a 6. Nessun dado carico nel nostro gioco!

Esempio 4: Taglie di Maglietta

type ShirtSize = 36 | 38 | 40 | 42 | 44;

let myShirtSize: ShirtSize = 40;
myShirtSize = 41; // Errore! Il tipo '41' non è assegnabile al tipo 'ShirtSize'.

Qui, stiamo limitando le taglie di maglietta a specifici numeri. Nessuna taglia intermedia permessa in questo negozio!

Tipi Letterali Combinati

La vera potenza dei tipi letterali si rivela quando combiniamo diversi tipi di letterali.

Esempio 5: Stato del Personaggio del Gioco

type CharacterStatus = "Alive" | "Dead" | 1 | 0;

let hero: CharacterStatus = "Alive";
hero = 1; // Questo è anche valido
hero = "Wounded"; // Errore! Il tipo '"Wounded"' non è assegnabile al tipo 'CharacterStatus'.

In questo gioco, un personaggio può essere "Alive", "Dead", 1 (rappresentando vivo), o 0 (rappresentando morto). È come avere sia una rappresentazione testuale che una codice!

Cas d'Uso per i Tipi Letterali

I tipi letterali sono estremamente utili in molte situazioni. Esploriamo alcuni:

1. Parametri delle Funzioni

type HttpMethod = "GET" | "POST" | "PUT" | "DELETE";

function sendRequest(url: string, method: HttpMethod) {
// Invia la richiesta
console.log(`Invio una richiesta ${method} a ${url}`);
}

sendRequest("https://api.example.com", "GET"); // Va bene
sendRequest("https://api.example.com", "FETCH"); // Errore! L'argomento di tipo '"FETCH"' non è assegnabile al parametro di tipo 'HttpMethod'.

Utilizzando un tipo letterale per il metodo HTTP, assicuriamo che solo metodi validi possano essere utilizzati.

2. Oggetti di Configurazione

type Theme = "light" | "dark" | "system";
type Language = "en" | "es" | "fr" | "de";

interface AppConfig {
theme: Theme;
language: Language;
notifications: boolean;
}

const myConfig: AppConfig = {
theme: "dark",
language: "en",
notifications: true
};

I tipi letterali ci aiutano a creare oggetti di configurazione rigorosi, prevenendo errori di battitura e impostazioni non valide.

3. Macchine a Stati

type LoginState = "loggedOut" | "loggingIn" | "loggedIn" | "error";

class LoginManager {
private state: LoginState = "loggedOut";

login() {
this.state = "loggingIn";
// Esegui la logica di login
this.state = Math.random() > 0.5 ? "loggedIn" : "error";
}

logout() {
this.state = "loggedOut";
}

getState(): LoginState {
return this.state;
}
}

Qui, utilizziamo i tipi letterali per rappresentare diversi stati in un processo di login, assicurando che lo stato possa essere solo uno dei valori predefiniti.

Tabella dei Metodi

Ecco una tabella che riassume i metodi e i concetti chiave che abbiamo coperto:

Metodo/Concetto Descrizione Esempio
Dichiarazione di Tipo Definire un nuovo tipo utilizzando valori letterali type DayOfWeek = "Monday" \| "Tuesday" \| ...
Assegnazione di Variabile Assegnare un tipo letterale a una variabile let today: DayOfWeek = "Monday";
Parametri delle Funzioni Utilizzare tipi letterali nei parametri delle funzioni function sendRequest(method: HttpMethod) {...}
Letterali Combinati Mescolare diversi tipi di letterali type Status = "Active" \| "Inactive" \| 0 \| 1;
Proprietà degli Interfacce Utilizzare tipi letterali nelle proprietà degli interfacce interface Config { theme: "light" \| "dark" }

Eccoci, mio apprendista di coding! Hai appena livellato nel tuo viaggio di TypeScript mastery padroneggiando i tipi letterali. Ricorda, come scegliere il topping perfetto per una pizza, i tipi letterali ti aiutano a essere specifico e a evitare errori. Continua a praticare, e presto creerai codice sicuro e delizioso come una pizza ben fatta! ??

Credits: Image by storyset