Tipos Literais
Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 33 de 73.
Tipos como string permitem qualquer string — mas às vezes apenas alguns valores exatos fazem sentido. Um literal type usa o próprio valor como o tipo:
local mode: "dark" = "dark" -- apenas a string "dark" é permitida
local locked: true = true -- apenas o boolean true é permitidoPor si só, tipos de valor único são apenas uma curiosidade. Combinados com unions, eles se tornam uma das ferramentas mais úteis do Luau — um conjunto estritamente controlado de values permitidos:
type Direction = "north" | "south" | "east" | "west"
type GameState = "menu" | "playing" | "paused" | "gameover"
local move: Direction = "north" -- ✓
local state: GameState = "playing" -- ✓
-- local bad: Direction = "diagonal" -- ✗ erro de tipo!Agora um erro de digitação como "nort" ou um valor inválido como "diagonal" é capturado enquanto você edita — com uma string simples, ele passaria sem problemas e quebraria em tempo de execução, se você tiver a sorte de perceber.
Literal types são case-sensitive e exatos: "North" não corresponde a "north". String literals são o caso mais comum, mas boolean e (em versões mais recentes do Luau) number literals funcionam da mesma forma. Esse padrão — uma união de string literals — também é como o Luau substitui os enums de outras linguagens, como você verá em um capítulo posterior.
Desafio
FácilCrie três aliases de tipo de união literal:
Direction="north" | "south" | "east" | "west"GameState="menu" | "playing" | "paused" | "gameover"Difficulty="easy" | "medium" | "hard"
Declare, usando os aliases:
playerDirection: Direction="north"currentState: GameState="playing"selectedDifficulty: Difficulty="medium"
Crie uma função movePlayer(direction: Direction): string retornando "Moving [direction]", e uma função updateGameState(state: GameState): string retornando "Game state: [state]".
Imprima, cada um em sua própria linha:
movePlayer(playerDirection)updateGameState(currentState)- o valor de
selectedDifficulty
Experimente você mesmo
-- Escreva o código aqui
-- tipar Direction / GameState / Difficulty como uniões literais
-- declarar playerDirection, currentState, selectedDifficulty
-- movePlayer(direction: Direction): string -> "Moving [direction]"
-- updateGameState(state: GameState): string -> "Game state: [state]"
-- imprima os três resultados
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
1Começando com o Luau
O que é Luau?Por que usar Luau?Seu primeiro código em LuauVerificação de tipos e modos de erroRecapitulando: Introdução ao Luau4Trabalhando com Funções
Tipando Parâmetros e Valores de RetornoTipando Funções AnônimasFunções que Não Retornam NadaParâmetros OpcionaisValores Padrão para ParâmetrosFunções VariádicasDefinindo Tipos de FunçõesRecapitulação: Funções Tipadas2Tipos Fundamentais
Tipos Básicos: num, str, boolO Tipo 'any': Escape HatchO Tipo 'unknown'Tipos Nil e OpcionaisInferência de Tipos na PráticaAnotações Explícitas de TiposReciclagem: Prática de Tipos Fundamentais5Aliases, Uniões, Interseções
Aliases de Tipos para PrimitivosTipos de UniãoTrabalhando com Tipos de UniãoTipos LiteraisTipos de InterseçãoCombinando Aliases de TiposRecapitulando: Combinações Avançadas de Tipos3Tabelas Tipadas: Arrays e Maps
Arrays TipadosAdicionando e Lendo ElementosO que é um Tipo Map?Declarando e Acessando MapsIterando Sobre TabelasTabelas de Formato MistoArrays Tipados Multidimensionaistable.unpack e VarargsRecapitulando: Arrays e Maps