Extension de structures
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 41 sur 73.
Les formes similaires partagent souvent des champs. Chaque Admin est également un User ; copier les champs partagés dans les deux déclarations risque de les faire diverger.
Vous avez 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 de A et tout 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}Là où TypeScript nécessite un mot-clé extends distinct pour les interfaces, Luau n'a besoin de rien de nouveau — les intersections font déjà le travail. Vous pouvez enchaîner plusieurs parties :
type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}Ne confondez pas & avec | : une union A | B représente l'une ou l'autre forme, tandis qu'une intersection A & B doit satisfaire les deux à la fois. Et comme Admin possède chaque champ de User, une valeur Admin peut être transmise partout où un User est attendu.
Défi
FacileCréez 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éez :
teamLeadde typeManager— id101, name"Alice Johnson", department"Engineering", teamSize8devde typeDeveloper— id102, name"Bob Smith", department"Engineering", email"bob@company.com", yearsExperience5
Créez une fonction getManagerSummary qui prend un Manager et renvoie [name] manages [teamSize] people.
Affichez, chacun sur sa propre ligne :
- le résultat de
getManagerSummary(teamLead) [name] has [yearsExperience] years of experiencepourdev- le department de
teamLead - l'email de
dev
Essayez vous-même
-- Écrivez le code ici
-- 1) définissez Employee, puis Manager / Contact / Developer avec &
-- 2) créez teamLead et dev
-- 3) écrivez getManagerSummary
-- 4) imprimez 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 Maps