Menu
Coddy logo textTech

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 é permitido

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

challenge icon

Desafio

Fácil

Crie 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:

  1. movePlayer(playerDirection)
  2. updateGameState(currentState)
  3. 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
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