Da trilha de TypeScript Este conceito ainda não saiu como card do dia. ir para o card de hoje

TypeScript Fundamentos Básico

Anotações e inferência

Em TypeScript, anotação de tipo é quando escrevemos explicitamente o tipo de uma variável, parâmetro ou retorno. Inferência é quando o compilador descobre o tipo sozinho a partir do valor atribuído. Saber equilibrar os dois deixa o código mais seguro e menos verboso.

A regra prática: anote quando o tipo não é óbvio (parâmetros de função, retornos complexos, variáveis que começam sem valor) e deixe inferir quando o valor já diz tudo (const nome = 'Ana').

const e let influenciam a inferência: const cria um tipo literal (ex.: 'ativo'), enquanto let faz widening para o tipo geral (ex.: string). Isso evita erros comuns ao usar uniões de literais.

O retorno de funções também é inferido, mas anotar o retorno é uma boa prática em APIs públicas: documenta a intenção e evita que mudanças internas quebrem contratos sem aviso.

Pontos-chave

  • Anote parâmetros de função e retornos públicos; deixe o compilador inferir o resto.
  • const mantém o tipo literal; let faz widening para o tipo base.
  • A inferência de retorno funciona, mas anotar evita mudanças acidentais de contrato.
  • Use as const para preservar literais em objetos e arrays.
  • Evite any explícito: ele desliga a checagem e esconde erros.
anotacoes_inferencia.ts
// Anotação explícita: útil quando o tipo não é óbvio
let contador: number;
contador = 0;

// Inferência: o tipo já está claro pelo valor
const nome = 'Ana';        // tipo: 'Ana' (literal)
let cidade = 'Recife';     // tipo: string (widening)

// const preserva o literal; let amplia para string
const status = 'ativo';    // tipo: 'ativo'
let status2 = 'ativo';     // tipo: string

// Função com parâmetros anotados e retorno inferido
function dobro(n: number) {
  return n * 2;            // retorno inferido: number
}

// Função com retorno anotado: contrato explícito
function saudacao(nome: string): string {
  return `Olá, ${nome}!`;
}

// União de literais: anotação evita widening indesejado
type Estado = 'ativo' | 'inativo';
let estado: Estado = 'ativo';
// estado = 'pausado'; // erro: tipo não permitido

// `as const` mantém literais em objetos
const config = { modo: 'producao', tentativas: 3 } as const;
// config.modo = 'teste'; // erro: readonly

console.log(contador, nome, cidade, status, status2);
console.log(dobro(21), saudacao('Ana'));
console.log(estado, config.modo, config.tentativas);

Exercícios

  1. 1
    Fácil

    Anotando e inferindo tipos básicos

    Crie variáveis para representar um produto: nome (string), preço (number) e disponível (boolean). Use inferência para nome e preco, e anotação explícita para disponivel. Depois imprima os três valores.

    Resolver
  2. 2
    Médio

    Função com retorno anotado e união de literais

    Crie uma função classificarIdade que recebe idade: number e retorna 'crianca', 'adulto' ou 'idoso'. Anote explicitamente o tipo de retorno como uma união de literais. Depois teste com três idades e imprima os resultados.

    Resolver
  3. 3
    Desafio

    Inferência com `as const` e função genérica

    Crie um array const com os estados 'ativo', 'inativo' e 'pendente' usando as const. Escreva uma função genérica primeiro<T>(lista: readonly T[]): T que retorna o primeiro elemento. Use a função para obter o primeiro estado e imprima o valor e seu tipo literal. Depois tente atribuir um valor inválido a uma variável anotada com o tipo do primeiro estado e comente a linha que causaria erro.

    Resolver

Continue estudando