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

チャレンジ

簡単

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

  • Employeeidnumber)、namestring)、departmentstring
  • Manager&を使ってEmployeeを拡張し、teamSizenumber)を追加
  • Contactemailstring
  • 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入門のすべてのレッスン

自分で練習してみよう: Luaオンラインコンパイラ