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 vont dans l’autre direction : l’esperluette & combine des formes 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 plaint : une intersection est un « et », jamais un choix à la carte. Cela vous permet de construire de grandes formes à partir de petits éléments réutilisables : définissez des types ciblés pour des préoccupations distinctes, puis assemblez-les selon vos besoins :
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Une remarque importante concernant Luau : faites des intersections de formes de tables (et de types function), pas de types primitifs. Quelque chose comme number & string n’a aucun sens, puisqu’aucune valeur ne peut être les deux à la fois. Lorsque vous voulez « cette forme plus cette forme », & est l’outil qu’il vous faut.
À l’exécution, bien sûr, un Person est simplement une table Lua ordinaire : l’intersection n’existe que pour le vérificateur.
Défi
FacileCréez deux alias de forme : 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’âge30et l’adresse e-mail"bob@company.com"
Créez displayPerson(person: Person): string qui renvoie "Name: [name], Age: [age]", ainsi que displayEmployee(employee: Employee): string qui renvoie "Name: [name], Age: [age], Email: [email]".
Affichez displayPerson(user) et displayEmployee(worker) sur des lignes distinctes.
Essayez vous-même
-- Écrire 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 MapsEntraînez-vous par vous-même : Compilateur Lua en ligne