Menu
CoddyTech

インターセクション型

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

ユニオン型は、値がある型または別の型であることを示します。交差型はその逆です。アンパサンド&でテーブルの形状を組み合わせ、各部分のフィールドをすべて持つ型を作ります。

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- Person には両方のフィールドが必要
local user: Person = {
    name = "Alice",
    age = 25,
}

ageを省くと、型チェッカーはエラーを出します。交差型は「かつ」であり、選択式ではありません。これを使えば、小さく再利用できる要素から大きな形状を作れます。個別の関心事に対応する型を定義し、必要に応じて組み合わせましょう。

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Luauで重要な注意点があります。交差させるのはテーブルの形状(および関数型)であり、プリミティブ型ではありません。number & stringのような型には意味がありません。同時に両方である値は存在しないからです。「この形状とあの形状」を組み合わせたいときは、&を使います。

もちろん、実行時にはPersonは通常のLuaテーブルにすぎません。交差型が存在するのは型チェッカー上だけです。

challenge icon

チャレンジ

簡単

2つの小さな形を組み合わせて、1つにしましょう。

  1. type HasName = {name: string}、type HasAge = {age: number}、およびtype Person = HasName & HasAgeと記述します。
  2. local user: Person = {name = "Omar", age = 31}を作成します。
  3. `Name: {user.name}, Age: {user.age}`を出力します。

Run Codeを押すと、出力にName: Omar, Age: 31が表示されます。

自分で試してみよう

-- 1) type HasName、type HasAge、type Person = HasName & HasAge
-- 2) local user: Person = {...}
-- 3) 名前と年齢の行を出力する

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

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