셰이프 확장하기
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가 필요한 모든 곳에 전달할 수 있습니다.
챌린지
쉬움다음 타입 별칭을 만드세요:
Employee:id(number),name(string),department(string)Manager:Employee를teamSize(number)와 함께 확장 (&사용)Contact:email(string)Developer:Employee,Contact및{yearsExperience: number}의 교집합
다음을 만드세요:
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) 요청된 네 줄을 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러