Literals
TypeScript tem alguns casos engraçados para literais em seu código
Grande parte desse suporte é abordado em widening
and narrowing ( example:type-widening-narrowing ) e vale
a pena cobrir isto primeiro.
Um literal é um subtipo mais concreto de uma coleção de tipos.
Isso significa que "Olá Mundo" é uma string, mas uma string
não é um "Olá Mundo" dentro do sistema de tipos.
// Isso permite você declarar APIs que usam unions para dizer
que só aceitam literais específicos:
const olaMundo = "Olá Mundo";
let oiMundo = "Oi Mundo"; // isso é uma string porque foi declarado com let
// Essa função recebe qualquer string
declare function permiteQualquerString(arg: string);
permiteQualquerString(olaMundo);
permiteQualquerString(oiMundo);
// Essa função aceita apenas o literal "Olá Mundo"
declare function permiteApenasOlaMundo(arg: "Olá Mundo");
permiteApenasOlaMundo(olaMundo);
permiteApenasOlaMundo(oiMundo);
// Veja como isso transforma `nome: "Sabrina"` para `nome: string`
mesmo que definido como uma constante. Isso acontece pelo fato do nome
poder ser alterado a qualquer momento:
declare function permiteOsPrimeirosCincoNumeros(arg: 1 | 2 | 3 | 4 | 5);
permiteOsPrimeirosCincoNumeros(1);
permiteOsPrimeirosCincoNumeros(10);
let potencilamenteQualquerNumero = 3;
permiteOsPrimeirosCincoNumeros(potencilamenteQualquerNumero);
// A primeira vista essa regra não é aplicada para objetos complexos.
const meuUsuario = {
nome: "Sabrina",
};
// Porque o nome do objeto meuUsuario poder ser alterado, o TypeScript
não pode usar a versão literal no sistema de tipagem.
No entanto existe uma funcionalidade que permite você fazer isso.
meuUsuario.nome = "Cynthia";
// Quado "as const" é aplicado ao objeto, ele se torna
um objeto literal que não pode ser alterado ao invés de um
objeto mutável.
const meuUsuarioImutavel = {
nome: "Fatma",
} as const;
// "as const" é uma ótima ferramenta para dados fixos e lugares
onde você trata código como literal. "as const" também
funciona com arrays:
meuUsuarioImutavel.nome = "Raîssa";
const usuariosExemplos = [{ nome: "Brian" }, { nome: "Fahrooq" }] as const;