Tipe Intersection
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 34 dari 73.
Union menyatakan bahwa sebuah nilai memiliki satu tipe atau tipe lainnya. Tipe irisan menyatakan kebalikannya: ampersand & menggabungkan bentuk tabel menjadi tipe yang memiliki semua field dari setiap bagiannya:
type HasName = { name: string }
type HasAge = { age: number }
type Person = HasName & HasAge
-- Person harus memiliki KEDUA field
local user: Person = {
name = "Alice",
age = 25,
}Jika kamu tidak menyertakan age, pemeriksa akan mengeluh: irisan berarti "dan", bukan memilih sesuka hati. Dengan ini, kamu bisa menyusun bentuk besar dari bagian-bagian kecil yang dapat digunakan kembali: definisikan tipe khusus untuk hal-hal yang terpisah, lalu gabungkan sesuai kebutuhan:
type HasEmail = { email: string }
type Employee = HasName & HasAge & HasEmail
Catatan penting tentang Luau: iriskan bentuk tabel (dan tipe fungsi), bukan tipe primitif. Sesuatu seperti number & string tidak bermakna, karena tidak ada nilai yang bisa menjadi keduanya sekaligus. Saat kamu menginginkan "bentuk ini ditambah bentuk itu", & adalah alat yang kamu perlukan.
Saat runtime, tentu saja, Person hanyalah tabel Lua biasa: irisan hanya ada untuk pemeriksa.
Tantangan
MudahBuat dua alias shape: HasName dengan field name: string, dan HasAge dengan field age: number.
Buat Person sebagai irisan HasName & HasAge.
Buat HasEmail dengan field email: string, dan Employee sebagai irisan ketiganya: HasName & HasAge & HasEmail.
Deklarasikan:
user: Persondengan nama"Alice"dan usia25worker: Employeedengan nama"Bob", usia30, dan email"bob@company.com"
Buat displayPerson(person: Person): string yang mengembalikan "Name: [name], Age: [age]", dan displayEmployee(employee: Employee): string yang mengembalikan "Name: [name], Age: [age], Email: [email]".
Cetak displayPerson(user) dan displayEmployee(worker) pada baris terpisah.
Coba sendiri
-- Tulis kodemu di sini
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- Deklarasikan user dan worker, lalu tulis kedua fungsi tampilan,
-- Cetak displayPerson(user) dan displayEmployee(worker)
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengantar Luau
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan3Tabel Bertipe: array dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: array dan MapLatihan sendiri: Compiler Luau online