Menu
Coddy logo textTech

Types intersections

Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 34 sur 73.

Les unions indiquent qu'une valeur est d'un type ou d'un autre. Les types d'intersection fonctionnent dans l'autre sens : le esperluette & combine des structures 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

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

Omettez age et le vérificateur se plaindra — une intersection est un "et", pas un choix à la carte. Cela vous permet de construire de grandes structures à partir de petits morceaux réutilisables : définissez des types ciblés pour des préoccupations distinctes, puis rassemblez-les selon vos besoins :

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Une note importante concernant Luau : intersectez des structures de tables (et des types de fonctions) — pas des types primitifs. Une expression comme number & string n'a aucun sens, car aucune valeur ne peut être les deux à la fois. Lorsque vous voulez "cette structure plus cette structure", & est votre outil.

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

challenge icon

Défi

Facile

Créez deux alias de type : HasName avec un champ name: string, et HasAge avec un champ age: number.

Créez Person comme l'intersection HasName & HasAge.

Créez HasEmail avec un champ email: string, et Employee comme l'intersection des trois : HasName & HasAge & HasEmail.

Déclarez :

  • user: Person avec le nom "Alice" et l'âge 25
  • worker: Employee avec le nom "Bob", l'âge 30, et l'email "bob@company.com"

Créez displayPerson(person: Person): string renvoyant "Name: [name], Age: [age]", et displayEmployee(employee: Employee): string renvoyant "Name: [name], Age: [age], Email: [email]".

Affichez displayPerson(user) et displayEmployee(worker) sur des lignes séparées.

Essayez vous-même

-- Écrivez le code ici
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- déclarez user et worker, écrivez les deux fonctions d'affichage,
-- affichez displayPerson(user) et displayEmployee(worker)
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Introduction à Luau