Schnittmengen-Typen (Intersection Types)
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 34 von 73.
Unions besagen, dass ein Wert ein Typ oder ein anderer ist. Intersection types (Schnittmengen-Typen) bewirken das Gegenteil: Das Ampersand & kombiniert Tabellen-Formen zu einem Typ, der alle Felder jedes Teils besitzt:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- eine Person muss BEIDE Felder haben
local user: Person = {
name = "Alice",
age = 25,
}Lassen Sie age weg, beschwert sich die Typprüfung — eine Intersection ist ein "Und", niemals eine freie Auswahl. Dadurch können Sie große Formen aus kleinen, wiederverwendbaren Bausteinen zusammensetzen: Definieren Sie fokussierte Typen für einzelne Aufgaben und fügen Sie diese bei Bedarf zusammen:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Ein wichtiger Hinweis zu Luau: Verknüpfen Sie Tabellen-Formen (und Funktions-Typen) per Intersection — keine primitiven Typen. Etwas wie number & string ist weitgehend sinnlos, da kein Wert beides gleichzeitig sein kann. Wenn Sie "diese Form plus jene Form" ausdrücken möchten, ist & Ihr Werkzeug.
Zur Laufzeit ist ein Person-Wert natürlich einfach eine ganz normale Lua-Tabelle — die Intersection existiert nur für die Typprüfung.
Aufgabe
EinfachErstelle zwei Shape-Aliase: HasName mit einem name: string-Feld und HasAge mit einem age: number-Feld.
Erstelle Person als Schnittmenge (Intersection) HasName & HasAge.
Erstelle HasEmail mit einem email: string-Feld und Employee als Schnittmenge aller drei: HasName & HasAge & HasEmail.
Deklariere:
user: Personmit name"Alice"und age25worker: Employeemit name"Bob", age30und email"bob@company.com"
Erstelle displayPerson(person: Person): string, das "Name: [name], Age: [age]" zurückgibt, und displayEmployee(employee: Employee): string, das "Name: [name], Age: [age], Email: [email]" zurückgibt.
Gib displayPerson(user) und displayEmployee(worker) in separaten Zeilen aus.
Probier es selbst
-- Schreibe hier den Code
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- deklariere user und worker, schreibe die beiden display-Funktionen,
-- gib displayPerson(user) und displayEmployee(worker) aus
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Einführung in Luau
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-Aliase, Union-Typen und Schnittmengen-Typen
Typ-Aliase für PrimitivenUnion-TypenArbeiten mit Union-TypenLiterale TypenSchnittmengen-Typen (Intersection Types)Kombination von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: Arrays und Maps