인터섹션 타입
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 34번째.
유니온은 값이 하나의 타입 또는 다른 타입이라고 말합니다. 교차 타입(Intersection types)은 반대 방향을 가리킵니다. 앰퍼샌드 &는 테이블 형태들을 결합하여 모든 부분의 모든 `fields`를 가지는 타입을 만듭니다:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- Person은 두 필드를 모두 가져야 합니다
local user: Person = {
name = "Alice",
age = 25,
}age를 빠뜨리면 체커가 경고합니다 — 교차 타입은 "AND"이며, 절대 골라잡는 것이 아닙니다. 이를 통해 작은 재사용 가능한 조각들로 큰 형태를 구축할 수 있습니다. 개별 관심사에 맞춰 `focused` 타입을 정의한 다음, 필요할 때 `together`로 결합하세요:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Luau에서 주의할 점 하나: 기본 타입(primitives)이 아닌 테이블 형태(그리고 `function` 타입)를 교차하세요. number & string과 같은 것은 어떤 값도 동시에 둘 다 될 수 없으므로 의미가 없습니다. "이 형태에 저 형태를 더하고" 싶을 때, &가 바로 사용하는 도구입니다.
런타임에서 Person은 물론 일반 Lua 테이블일 뿐입니다 — 교차 타입은 체커만을 위해 존재합니다.
챌린지
쉬움두 개의 타입 별칭을 만드세요: name: string 필드를 가진 HasName과 age: number 필드를 가진 HasAge.
HasName & HasAge 교차 타입으로 Person을 만드세요.
email: string 필드를 가진 HasEmail을 만들고, 세 가지 모두의 교차 타입인 Employee를 만드세요: HasName & HasAge & HasEmail.
다음과 같이 선언하세요:
name이"Alice"이고age가25인user: Personname이"Bob",age가30,email이"bob@company.com"인worker: Employee
"Name: [name], Age: [age]"를 반환하는 displayPerson(person: Person): string과 "Name: [name], Age: [age], Email: [email]"을 반환하는 displayEmployee(employee: Employee): string을 만드세요.
displayPerson(user)와 displayEmployee(worker)를 줄바꿈하여 출력하세요.
직접 해보기
-- 여기에 코드를 작성하세요
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- user와 worker를 선언하고, 두 개의 display 함수를 작성하세요,
-- displayPerson(user)와 displayEmployee(worker)를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.