Menu
Coddy logo textTech

形状の拡張

CoddyのLuaジャーニー「Luau入門」セクションの一部 — レッスン 41/73。

関連するシェイプはフィールドを共有することがよくあります。すべての AdminUser でもあります。共有フィールドを両方の宣言にコピーすると、それらが乖離してしまう原因になります。

エイリアスを組み合わせる際にインターセクション演算子 & を見かけたと思いますが、シェイプに対してもまったく同じように機能します。A & B は「AのすべてかつBのすべてを持つ」という意味になります:

type User = {name: string, age: number}
type Admin = User & {level: number}

-- Admin は現在、name、age、および level が必要です
local root: Admin = {name = "Root", age = 35, level = 9}

TypeScriptではインターフェースに別の extends キーワードが必要ですが、Luauでは新しいものは何も必要ありません — インターセクションがすでにその役割を果たします。複数のパーツをチェーン接続することもできます:

type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}

&| を混同しないでください。ユニオン A | Bどちらか一方のシェイプですが、インターセクション A & B両方を同時に満たす必要があります。そして Admin はすべての User フィールドを持っているため、Admin の値は User が期待される任意の場所に渡すことができます。

challenge icon

チャレンジ

簡単

以下の型エイリアスを作成してください:

  • Employeeid (number)、name (string)、department (string)
  • ManagerEmployee を(& 経由で)拡張したもの、teamSize (number) を持つ
  • Contactemail (string)
  • DeveloperEmployeeContact{yearsExperience: number} の交差(intersection

以下を作成してください:

  • ManagerteamLead — id 101、name "Alice Johnson"、department "Engineering"、teamSize 8
  • Developerdev — id 102、name "Bob Smith"、department "Engineering"、email "bob@company.com"、yearsExperience 5

Manager を受け取り、[name] manages [teamSize] people を返す関数 getManagerSummary を作成してください。

それぞれを新しい行に出力してください:

  1. getManagerSummary(teamLead) の結果
  2. dev[name] has [yearsExperience] years of experience
  3. teamLead の department
  4. dev の email

自分で試してみよう

-- ここにコードを書いてください
-- 1) Employee を定義し、次に Manager / Contact / Developer を & で
-- 2) teamLead と dev を作成する
-- 3) getManagerSummary を書く
-- 4) 要求された4行を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Luau入門のすべてのレッスン