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 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.

challenge icon

Aufgabe

Einfach

Erstelle 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: Person mit name "Alice" und age 25
  • worker: Employee mit name "Bob", age 30 und 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
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