Menu
Coddy logo textTech

Asercje typów

Część sekcji Wprowadzenie do Luau ścieżki Lua w Coddy. Lekcja 68 z 73.

Czasami wiesz o wartości więcej niż checker typów Luau: na przykład wartość typu any, o której wiesz, że tak naprawdę jest rekordem użytkownika. Asercja typu (nazywana też rzutowaniem) pozwala powiedzieć checkerowi: „zaufaj mi, traktuj tę wartość jako ten typ”. Operator rzutowania w Luau to :::

type User = {id: number, username: string}

local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- moduł sprawdzający zna teraz pola

Rzutowanie zmienia tylko to, w co wierzy checker typów. Nie robi nic w czasie działania programu. Nigdy nie konwertuje wartości: "5" :: any nadal jest ciągiem znaków "5", a nie liczbą 5 (do rzeczywistej konwersji użyj tonumber). I nigdy nie przeprowadza walidacji: jeśli zadeklarujesz niewłaściwy typ, samo rzutowanie nie spowoduje błędu. Twój kod po prostu zacznie działać nieprawidłowo później, gdy odwoła się do pól, których nie ma.

Kiedy używać: gdy wartość przychodzi jako any (lub szeroka unia) i naprawdę znasz jej strukturę. Kiedy nie używać: żeby uciszyć błąd typów, którego nie rozumiesz: błąd zwykle wskazuje na rzeczywisty problem, a usunięcie go przez rzutowanie jedynie go ukrywa. Jeśli możesz sprawdzić wartość w czasie działania programu, wybieraj prawdziwe kontrole (takie jak strażniki typeof w następnej lekcji).

challenge icon

Wyzwanie

Łatwy

Zasymuluj przetwarzanie rekordów, które przychodzą z zewnętrznego źródła bez informacji o typie.

  • Zadeklaruj type User = {id: number, username: string, isActive: boolean}.
  • Napisz funkcję describeUser(data: any): string, która rzutuje data na typ User za pomocą :: i zwraca User [id]: [username] (Active: [isActive]), utworzony za pomocą interpolacji ciągów znaków.

Kod początkowy zawiera już trzy surowe rekordy typowane jako any. Wywołaj describeUser dla każdego z nich i wypisz trzy wyniki w podanej kolejności.

Oczekiwany pierwszy wiersz: User 42: alice_dev (Active: true)

Spróbuj swoich sił

-- Surowe rekordy z zewnętrznego źródła: typu `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}

-- Napisz kod tutaj
-- 1) zadeklaruj typ User
-- 2) describeUser(data: any): string — rzutuj za pomocą :: i utwórz komunikat
-- 3) wypisz opisy wszystkich trzech rekordów
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wprowadzenie do Luau

Poćwicz samodzielnie: Kompilator Luau online