TypeScript - Types littéraux : Guide pour les débutants

Bonjour, futur superstars du codage ! Aujourd'hui, nous plongeons dans le monde passionnant des types littéraux de TypeScript. Ne vous inquiétez pas si vous êtes nouveau dans la programmation - je serai votre guide amical à travers cette aventure. À la fin de ce tutoriel, vous serez capable de manier les types littéraux comme un pro !

TypeScript - Literal Types

Qu'est-ce que les types littéraux ?

Avant de rentrer dans le vif du sujet, imaginons que vous commandez une pizza. Vous ne pouvez pas juste dire : "Je veux une pizza." Vous devez spécifier la taille : petite, moyenne ou grande. En TypeScript, les types littéraux sont comme ces tailles spécifiques de pizza - ce sont des valeurs exactes que peut prendre une variable.

Syntaxe

La syntaxe pour les types littéraux est simple. Vous utilisez simplement la valeur exacte que vous souhaitez autoriser. Jetons un coup d'œil à un exemple de base :

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

Dans ce cas, pizzaSize ne peut être que "small", "medium" ou "large". Rien d'autre n'est autorisé - ni "extra large" ni "minuscule" !

Types littéraux de chaîne

Les types littéraux de chaîne sont les plus courants et les plus faciles à comprendre. Ils sont exactement ce qu'ils disent - des chaînes spécifiques que peut être une variable.

Exemple 1 : Jours de la semaine

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

let today: DayOfWeek = "Monday";
today = "Friday"; // C'est correct
today = "Someday"; // Erreur ! Le type '"Someday"' n'est pas assignable au type 'DayOfWeek'.

Dans cet exemple, DayOfWeek est un type qui ne peut être qu'un des sept jours de la semaine. Essayez d'assigner une autre chaîne, et TypeScript vous_indexera du doigt !

Exemple 2 : Couleurs des feux de circulation

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

function changeLight(color: TrafficLightColor) {
console.log(`Le feu est passé à ${color}`);
}

changeLight("Green"); // Ça fonctionne bien
changeLight("Purple"); // Erreur ! L'argument de type '"Purple"' n'est pas assignable au paramètre de type 'TrafficLightColor'.

Ici, nous nous assurons que notre feu de circulation ne peut changer que vers des couleurs valides. Pas de lumières disco sur cette rue !

Types littéraux numériques

Comme avec les chaînes, nous pouvons créer des types littéraux avec des nombres. C'est génial lorsque vous souhaitez restreindre une valeur à des nombres spécifiques.

Exemple 3 : Lancers de dés

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(`Vous avez jeté un ${myRoll}`);

Dans cet exemple, nous nous assurons que notre dé ne peut lancer que des nombres de 1 à 6. Pas de dés truqués dans notre jeu !

Exemple 4 : Tailles de chemises

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

let myShirtSize: ShirtSize = 40;
myShirtSize = 41; // Erreur ! Le type '41' n'est pas assignable au type 'ShirtSize'.

Ici, nous restreignons les tailles de chemises à des nombres spécifiques. Pas de tailles intermédiaires dans ce magasin !

Types littéraux combinés

La véritable puissance des types littéraux apparaît lorsque nous combinons différents types de littéraux.

Exemple 5 : État du personnage de jeu

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

let hero: CharacterStatus = "Alive";
hero = 1; // Cela est également valide
hero = "Wounded"; // Erreur ! Le type '"Wounded"' n'est pas assignable au type 'CharacterStatus'.

Dans ce jeu, un personnage peut être "Alive", "Dead", 1 (représentant vivant), ou 0 (représentant mort). C'est comme avoir à la fois une représentation texte et une représentation code !

Cas d'utilisation des types littéraux

Les types littéraux sont extrêmement utiles dans de nombreux scénarios. Explorons quelques-uns :

1. Paramètres de fonction

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

function sendRequest(url: string, method: HttpMethod) {
// Envoyer la requête
console.log(`Envoi de la requête ${method} vers ${url}`);
}

sendRequest("https://api.example.com", "GET"); // Ça fonctionne bien
sendRequest("https://api.example.com", "FETCH"); // Erreur ! L'argument de type '"FETCH"' n'est pas assignable au paramètre de type 'HttpMethod'.

En utilisant un type littéral pour la méthode HTTP, nous nous assurons que seules les méthodes valides peuvent être utilisées.

2. Objets de configuration

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
};

Les types littéraux nous aident à créer des objets de configuration stricts, évitant les fautes de frappe et les paramètres invalides.

3. Machines à états

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

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

login() {
this.state = "loggingIn";
// Logique de connexion
this.state = Math.random() > 0.5 ? "loggedIn" : "error";
}

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

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

Ici, nous utilisons les types littéraux pour représenter différents états dans un processus de connexion, en nous assurant que l'état ne peut être qu'un des valeurs prédéfinies.

Tableau des méthodes

Voici un tableau résumant les méthodes et concepts clés que nous avons couverts :

Méthode/Concept Description Exemple
Déclaration de type Définir un nouveau type en utilisant des valeurs littérales type DayOfWeek = "Monday" \| "Tuesday" \| ...
Assignation de variable Assigner un type littéral à une variable let today: DayOfWeek = "Monday";
Paramètres de fonction Utiliser des types littéraux dans les paramètres de fonction function sendRequest(method: HttpMethod) {...}
Littéraux combinés Mixer différents types de littéraux type Status = "Active" \| "Inactive" \| 0 \| 1;
Propriétés d'interface Utiliser des types littéraux dans les propriétés d'interface interface Config { theme: "light" \| "dark" }

Et voilà, mon apprenti codage ! Vous venez de monter en niveau dans votre parcours TypeScript en maîtrisant les types littéraux. Souvenez-vous, comme choisir le parfait topping de pizza, les types littéraux vous aident à être spécifique et à éviter les erreurs. Continuez à vous entraîner, et bientôt vous créerez du code sûr et délicieux, comme une pizza parfaitement cuite ! ??

Credits: Image by storyset