Menu
Coddy logo textTech

Asserções de Tipo

Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 68 de 73.

Às vezes você sabe mais sobre um valor do que o checador de tipos do Luau — um valor tipado como any que você sabe que é na verdade um registro de usuário, por exemplo. Uma asserção de tipo (também chamada de cast) permite que você diga ao checker "confie em mim, trate este valor como este tipo". O operador de cast do Luau é :::

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

local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- o verificador agora conhece os campos

Um cast altera apenas o que o checador de tipos acredita — ele não faz nada em tempo de execução. Ele nunca converte um valor: "5" :: any still é a string "5", não o number 5 (use tonumber para conversão real). E ele nunca valida: se você afirmar o tipo errado, o próprio cast não gerará erro — seu código simplesmente funcionará incorretamente later, quando tocar em campos que não estão lá.

Quando usar: quando um valor chega como any (ou uma união ampla) e você realmente conhece sua estrutura (shape). Quando não usar: para silenciar um erro de tipo que você não entende — o erro geralmente está te avisando sobre um bug real, e usar cast apenas o esconde. Prefira verificações reais (como as guardas de typeof na próxima lição) quando você puder verificar em tempo de execução.

challenge icon

Desafio

Fácil

Simule o processamento de registros que chegam de uma fonte externa sem informações de tipo.

  • Declare type User = {id: number, username: string, isActive: boolean}.
  • Escreva uma função describeUser(data: any): string que faz o cast de data para User com :: e retorna User [id]: [username] (Active: [isActive]) construído com interpolação de string.

O código inicial já define três registros brutos tipados como any. Chame describeUser em cada um deles e imprima os três resultados, em ordem.

Primeira linha esperada: User 42: alice_dev (Active: true)

Experimente você mesmo

-- Registros brutos de uma fonte externa: tipados como `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}

-- Escreva o código aqui
-- 1) declare o tipo User
-- 2) describeUser(data: any): string — faça cast com :: e construa a mensagem
-- 3) imprima a descrição de todos os três registros
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Introdução ao Luau