Menu
CoddyTech

Types intersections

Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 36 sur 80.

Les unions indiquent qu’une valeur est d’un type ou d’un autre. Les types intersection vont dans l’autre sens : l’esperluette & combine des formes de tables en un type qui possède tous les champs de chaque partie :

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- un Person doit avoir les DEUX champs
local user: Person = {
    name = "Alice",
    age = 25,
}

Omettez age et le vérificateur se plaint : une intersection signifie « et », jamais un choix à la carte. Cela vous permet de construire de grandes formes à partir de petits éléments réutilisables : définissez des types ciblés pour des préoccupations distinctes, puis assemblez-les selon vos besoins :

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Un point important à propos de Luau : faites l’intersection de formes de tables (et de types de fonctions), pas de types primitifs. Une expression comme number & string n’a aucun sens, puisqu’aucune valeur ne peut être les deux à la fois. Lorsque vous voulez « cette forme plus cette autre forme », & est l’outil qu’il vous faut.

À l’exécution, bien sûr, un Person est simplement une table Lua ordinaire : l’intersection n’existe que pour le vérificateur.

challenge icon

Défi

Facile

Combine deux petites formes en une seule.

  1. Écris type HasName = {name: string}, type HasAge = {age: number} et type Person = HasName & HasAge.
  2. Crée local user: Person = {name = "Omar", age = 31}.
  3. Affiche `Name: {user.name}, Age: {user.age}`.

Appuie sur Run Code : le résultat affiche Name: Omar, Age: 31.

Essayez vous-même

-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) afficher la ligne contenant le nom et l’âge

Toutes les leçons de Introduction à Luau

Entraînez-vous par vous-même : Compilateur Luau en ligne