Menu
CoddyTech

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-nya

Cast 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.

challenge icon

Tantangan

Mudah

Baca data yang diterima dengan tipe any.

  1. Tulis type User = {id: number, username: string, isActive: boolean}.
  2. Tulis local function describeUser(data: any): string yang melakukan cast dengan local user = data :: User dan mengembalikan `User {user.id}: {user.username} (Active: {user.isActive})`.
  3. 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

Latihan sendiri: Compiler Luau online