Pernyataan Tipe
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 74 dari 80.
Kamu sudah pernah menggunakan :: sekali, di bab enum, untuk memperlakukan io.read() sebagai Direction. Pelajaran ini membahasnya dengan lebih saksama.
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. Pernyataan tipe (juga disebut cast) memungkinkanmu memberi tahu pemeriksa tipe, "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 sekarang mengetahui field-nyaCast hanya mengubah apa yang dipercaya oleh 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 sungguhan). Cast juga tidak pernah memvalidasi nilai: 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. Sebaiknya gunakan pemeriksaan sungguhan (seperti pemeriksaan typeof di pelajaran berikutnya) saat kamu bisa memverifikasi nilai saat program berjalan.
Tantangan
MudahBaca data yang diterima dengan tipe any.
- Tulis
type User = {id: number, username: string, isActive: boolean}. - Tulis
local function describeUser(data: any): stringyang melakukan cast denganlocal user = data :: Userdan mengembalikan`User {user.id}: {user.username} (Active: {user.isActive})`. - Cetak
describeUser(rawUser2).
Tekan Jalankan Kode: output menampilkan User 15: bob_admin (Active: false).
Coba sendiri
-- Data mentah dari luar program: bertipe any
local rawUser1: any = {id = 7, username = "nina_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
-- 1) type User = {...}
-- 2) describeUser(data: any): string, konversi tipe dengan ::
-- 3) print describeUser(rawUser2)
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
Mengetik Parameter dan Nilai KembalianMengetik Fungsi AnonimFungsi Tanpa Nilai KembalianParameter OpsionalNilai Parameter DefaultNilai Default untuk BooleanFungsi VariadikMendefinisikan Tipe FungsiUlasan: Fungsi Bertipe2Tipe Inti
Number, String, dan BooleanTipe 'any': Jalan KeluarTipe 'unknown'Nil dan 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 & map
Array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMenelusuri TabelTabel dengan Bentuk CampuranMembaca GridMembuat Gridtable.unpackRangkuman: array dan mapLatihan sendiri: Compiler Luau online