Assertion Tipe
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 68 dari 73.
Terkadang kamu mengetahui lebih banyak tentang suatu nilai daripada yang diketahui pemeriksa tipe Luau: misalnya, nilai bertipe any yang kamu tahu sebenarnya adalah record pengguna. Asersi tipe (juga disebut cast) memungkinkanmu memberi tahu pemeriksa, "percayalah, perlakukan nilai ini sebagai tipe ini". Operator cast Luau adalah :::
type User = {id: number, username: string}
local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- pemeriksa kini mengenali field-nyaCast hanya mengubah apa yang diyakini pemeriksa tipe. Cast tidak melakukan apa pun saat program berjalan. Cast tidak pernah mengonversi nilai: "5" :: any tetap berupa string "5", bukan angka 5 (gunakan tonumber untuk konversi yang sebenarnya). Cast juga tidak pernah memvalidasi: jika kamu menyatakan tipe yang salah, cast itu sendiri tidak akan menghasilkan error. Kodemu hanya akan berperilaku keliru nanti, saat mengakses field yang tidak ada.
Kapan menggunakannya: saat suatu nilai diterima sebagai any (atau union yang luas) dan kamu benar-benar tahu bentuknya. Kapan tidak menggunakannya: untuk membungkam error tipe yang tidak kamu pahami: biasanya error itu menunjukkan bug yang nyata, dan menghilangkannya dengan cast hanya menyembunyikan bug tersebut. Utamakan pemeriksaan yang sebenarnya (seperti guard typeof di pelajaran berikutnya) saat kamu bisa memverifikasi saat program berjalan.
Tantangan
MudahSimulasikan pemrosesan catatan yang datang dari sumber eksternal tanpa informasi tipe.
- Deklarasikan
type User = {id: number, username: string, isActive: boolean}. - Tulis fungsi
describeUser(data: any): stringyang melakukan castdatamenjadiUserdengan::dan mengembalikanUser [id]: [username] (Active: [isActive])yang dibuat dengan interpolasi string.
Kode awal sudah mendefinisikan tiga catatan mentah bertipe any. Panggil describeUser pada masing-masing catatan dan cetak ketiga hasilnya secara berurutan.
Baris pertama yang diharapkan: User 42: alice_dev (Active: true)
Coba sendiri
-- Data mentah dari sumber eksternal: bertipe `any`
local rawUser1: any = {id = 42, username = "alice_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
local rawUser3: any = {id = 99, username = "charlie_user", isActive = true}
-- Tulis kodemu di sini
-- 1) deklarasikan tipe User
-- 2) describeUser(data: any): string, lakukan cast dengan :: dan susun pesannya
-- 3) cetak deskripsi ketiga data tersebut
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 Lanjutan8Enum, Cara Luau
Pola Enum di LuauEnum Numerik dengan TabelEnum String sebagai UnionMenggunakan Enum Union LiteralMembekukan Tabel KonstantaUlasan: Enum, Cara Luau11Topik Lanjutan
Assertion TipePenjaga Tipe dengan typeofTipe neverKeamanan Nil dalam Mode StrictSignature IndeksRangkuman: Menyempurnakan Tipe3Tabel 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