Menu
CoddyTech

Extension de structures

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

Les formes apparentées partagent souvent des champs. Chaque Admin est aussi un User ; copier les champs partagés dans les deux déclarations risque de les faire diverger.

Tu as découvert l’opérateur d’intersection & en combinant des alias. Il fonctionne exactement de la même façon pour les formes. A & B signifie « possède tout ce qui vient de A et tout ce qui vient de B » :

type User = {name: string, age: number}
type Admin = User & {level: number}

-- Admin nécessite désormais : name, age ET level
local root: Admin = {name = "Root", age = 35, level = 9}

Alors que TypeScript a besoin du mot-clé extends pour les interfaces, Luau n’a besoin de rien de nouveau : les intersections font déjà l’affaire. Tu peux en chaîner plusieurs :

type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}

Ne confonds pas & avec | : une union A | B correspond à l’une ou l’autre des formes, tandis qu’une intersection A & B doit satisfaire les deux à la fois. Et comme Admin possède tous les champs de User, une valeur Admin peut être passée partout où un User est attendu.

challenge icon

Défi

Facile

Étends un type d’employé pour en faire un type de responsable.

  1. Écris type Employee = {name: string, department: string} et type Manager = Employee & {teamSize: number}.
  2. Crée local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}.
  3. Affiche `{teamLead.name} manages {teamLead.teamSize} people`, puis teamLead.department.

Appuie sur Run Code : la sortie affiche Alice Johnson manages 8 people et Engineering.

Essayez vous-même

-- 1) définissez le type Employee, puis le type Manager = Employee & {...}
-- 2) déclarez local teamLead: Manager = {...}
-- 3) affichez la ligne récapitulative, puis le département

Toutes les leçons de Introduction à Luau

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