Schnittmengen-Typen (Intersection Types)
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 36 von 80.
Unions sagen aus, dass ein Wert dem einen oder dem anderen Typ entspricht. Intersection-Typen funktionieren umgekehrt: Das Und-Zeichen & verbindet Tabellenstrukturen zu einem Typ, der alle Felder jedes Bestandteils enthält:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- Ein Person-Objekt muss BEIDE Felder haben
local user: Person = {
name = "Alice",
age = 25,
}Lässt du age weg, beschwert sich der Prüfer: Eine Schnittmenge ist ein „und“, niemals eine Auswahl. So kannst du große Strukturen aus kleinen, wiederverwendbaren Teilen zusammensetzen: Definiere spezialisierte Typen für getrennte Bereiche und füge sie dann nach Bedarf zusammen:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Ein wichtiger Hinweis zu Luau: Bilde Schnittmengen aus Tabellenstrukturen (und Funktionstypen), nicht aus primitiven Typen. Etwas wie number & string ist bedeutungslos, da kein Wert gleichzeitig beides sein kann. Wenn du „diese Struktur plus jene Struktur“ möchtest, ist & dein Werkzeug.
Zur Laufzeit ist ein Person natürlich einfach eine gewöhnliche Lua-Tabelle: Die Schnittmenge existiert nur für den Prüfer.
Aufgabe
EinfachKombiniere zwei kleine Formen zu einer.
- Schreibe
type HasName = {name: string},type HasAge = {age: number}undtype Person = HasName & HasAge. - Erstelle
local user: Person = {name = "Omar", age = 31}. - Gib
`Name: {user.name}, Age: {user.age}`aus.
Klicke auf „Code ausführen“: Die Ausgabe zeigt Name: Omar, Age: 31.
Probier es selbst
-- 1) type HasName, type HasAge, type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) Gib die Zeile mit Namen und Alter aus
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 Luau4Mit Funktionen arbeiten
Parameter und Rückgabewerte typisierenAnonyme Funktionen typisierenFunktionen ohne RückgabewertOptionale ParameterStandardwerte für ParameterStandardwerte für boolesche WerteFunktionen mit variabler ParameteranzahlFunktionstypen definierenRückblick: typisierte Funktionen7Projekt: Typisierter Aufgabenmanager
Projekt: Die AufgabenstrukturFunktion zum Hinzufügen einer Aufgabe2Grundlegende Typen
Zahl, String und BooleanDer Typ „any“: NotausgangDer Typ „unknown“Nil- und optionale TypenTypinferenz in der PraxisExplizite TypannotationenRückblick: Übung zu grundlegenden Typen5Typ-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 ArraysElemente hinzufügen und auslesenWas ist ein Map-Typ?Maps deklarieren und auf Elemente zugreifenTabellen durchlaufenTabellen mit gemischten FormenEin Raster auslesenEin Raster erstellentable.unpackRückblick: Arrays und MapsÜbe selbstständig: Online-Luau-Compiler