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.
Défi
FacileCrée ces alias de type :
Employee:id(number),name(string),department(string)Manager:Employeeétendu (via&) avecteamSize(number)Contact:email(string)Developer: l’intersection deEmployee,Contactet{yearsExperience: number}
Crée :
teamLeadde typeManager: id101, nom"Alice Johnson", département"Engineering", teamSize8devde typeDeveloper: id102, nom"Bob Smith", département"Engineering", email"bob@company.com", yearsExperience5
Crée une fonction getManagerSummary qui prend un Manager et renvoie [name] manages [teamSize] people.
Affiche, chacune sur sa propre ligne :
- le résultat de
getManagerSummary(teamLead) [name] has [yearsExperience] years of experiencepourdev- le département de
teamLead - 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
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
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et MapsEntraînez-vous par vous-même : Compilateur Lua en ligne