Menu
Coddy logo textTech

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 der eine oder der andere Typ ist. Schnittmengentypen weisen in die andere Richtung: Das kaufmännische Und & kombiniert Tabellenformen zu einem Typ, der alle Felder jedes Bestandteils enthält:

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,
}

Lässt du age weg, beschwert sich der Prüfer: Eine Schnittmenge ist ein „und“, niemals eine beliebige Auswahl. So kannst du große Formen aus kleinen, wiederverwendbaren Bausteinen erstellen: Definiere fokussierte Typen für getrennte Verantwortlichkeiten und füge sie dann nach Bedarf zusammen:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Ein wichtiger Hinweis zu Luau: Verknüpfe Tabellenformen (und Funktionstypen), nicht primitive Typen. Etwas wie number & string ist bedeutungslos, da kein Wert gleichzeitig beides sein kann. Wenn du „diese Form plus jene Form“ 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

Erstelle zwei Formaliase: HasName mit einem name: string-Feld und HasAge mit einem age: number-Feld.

Erstelle Person als die Schnittmenge HasName & HasAge.

Erstelle HasEmail mit einem email: string-Feld und Employee als die Schnittmenge aller drei: HasName & HasAge & HasEmail.

Deklariere:

  • user: Person mit dem Namen "Alice" und dem Alter 25
  • worker: Employee mit dem Namen "Bob", dem Alter 30 und der E-Mail-Adresse "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 den Code hier
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- deklariere user und worker, schreibe die zwei display-Funktionen,
-- gib displayPerson(user) und displayEmployee(worker) aus
quiz iconTeste dich selbst

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

Übe selbstständig: Online-Lua-Compiler