扩展表结构
本课属于 Coddy Lua 学习旅程的“Luau 入门”单元。第 43 课,共 80 课。
相关形状通常有相同的字段。每个 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 的所有字段,凡是需要 User 的地方,都可以传入 Admin 值。
挑战
简单将员工结构扩展为经理结构。
- 编写
type Employee = {name: string, department: string}和type Manager = Employee & {teamSize: number}。 - 创建
local teamLead: Manager = {name = "Alice Johnson", department = "Engineering", teamSize = 8}。 - 打印
`{teamLead.name} manages {teamLead.teamSize} people`,然后打印teamLead.department。
点击运行代码:输出会显示 Alice Johnson manages 8 people 和 Engineering。
亲手试试
-- 1)定义类型 Employee,然后定义类型 Manager = Employee & {...}
-- 2)声明局部变量 teamLead: Manager = {...}
-- 3)先打印摘要行,再打印部门
Luau 入门中的所有课
自己练习: Luau 在线编译器