셰이프 확장하기
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 41번째.
관련된 셰이프들은 종종 필드를 공유합니다. 모든 Admin은 User이기도 합니다. 공유되는 필드를 두 선언에 모두 복사해 넣으면 나중에 서로 달라질 위험이 있습니다.
별칭을 결합할 때 교집합 연산자 &를 접해 보셨을 것입니다. 이는 셰이프에 대해서도 완전히 동일하게 작동합니다. 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가 예상되는 모든 곳에 전달될 수 있습니다.
챌린지
쉬움다음 타입 별칭(type alias)들을 생성하세요:
Employee—id(number),name(string),department(string)Manager—Employee에 (&를 통해)teamSize(number)가 확장된 타입Contact—email(string)Developer—Employee,Contact, 그리고{yearsExperience: number}의 교집합(intersection)
다음 변수들을 생성하세요:
Manager타입의teamLead— id101, name"Alice Johnson", department"Engineering", teamSize8Developer타입의dev— id102, name"Bob Smith", department"Engineering", email"bob@company.com", yearsExperience5
Manager를 인자로 받아 [name] manages [teamSize] people을 반환하는 함수 getManagerSummary를 생성하세요.
다음 내용을 각각 한 줄씩 출력하세요:
getManagerSummary(teamLead)의 결과dev에 대한[name] has [yearsExperience] years of experienceteamLead의 departmentdev의 email
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) Employee를 정의한 다음, &를 사용하여 Manager / Contact / Developer를 정의하세요
-- 2) teamLead와 dev를 생성하세요
-- 3) getManagerSummary를 작성하세요
-- 4) 요청된 네 줄을 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.