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.
Défi
FacileCré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: Personavec le nom"Alice"et l'âge25worker: Employeeavec le nom"Bob", l'âge30, 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)
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