Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach

Kombiniere zwei kleine Formen zu einer.

  1. Schreibe type HasName = {name: string}, type HasAge = {age: number} und type Person = HasName & HasAge.
  2. Erstelle local user: Person = {name = "Omar", age = 31}.
  3. 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

Übe selbstständig: Online-Luau-Compiler