Menu
Coddy logo textTech

Extension de structures

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

Les formes apparentées partagent souvent des champs. Chaque Admin est également un User ; recopier 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 manière 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 maintenant : name, age ET level
local root: Admin = {name = "Root", age = 35, level = 9}

Alors que TypeScript a besoin d’un mot-clé extends distinct pour les interfaces, Luau n’a besoin de rien de nouveau : les intersections font déjà le travail. Tu peux chaîner plusieurs parties :

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

Ne confonds pas & avec | : une union A | B représente soit une forme, tandis qu’une intersection A & B doit satisfaire les deux à la fois. Et puisque Admin possède tous les champs de User, une valeur Admin peut être transmise partout où un User est attendu.

challenge icon

Défi

Facile

Crée ces alias de type :

  • Employee : id (number), name (string), department (string)
  • Manager : Employee étendu (via &) avec teamSize (number)
  • Contact : email (string)
  • Developer : l’intersection de Employee, Contact et {yearsExperience: number}

Crée :

  • teamLead de type Manager : id 101, nom "Alice Johnson", département "Engineering", teamSize 8
  • dev de type Developer : id 102, nom "Bob Smith", département "Engineering", email "bob@company.com", yearsExperience 5

Crée une fonction getManagerSummary qui prend un Manager et renvoie [name] manages [teamSize] people.

Affiche, chacune sur sa propre ligne :

  1. le résultat de getManagerSummary(teamLead)
  2. [name] has [yearsExperience] years of experience pour dev
  3. le département de teamLead
  4. l’adresse e-mail de dev

Essayez vous-même

-- Écrivez le code ici
-- 1) définir Employee, puis Manager / Contact / Developer avec &
-- 2) créer teamLead et dev
-- 3) écrire getManagerSummary
-- 4) afficher les quatre lignes demandées
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

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