TypeScript virou o default de toda stack frontend séria no Brasil em 2026. Por exemplo, React, Next.js, Vue e Svelte criam projetos novos com TS direto do CLI. Por outro lado, muito iniciante ainda fica preso na pergunta básica: “como eu tipo uma função? Como tipo um objeto? Quando usar type vs interface?”. Portanto, neste guia atualizado em 2026 você aprende TypeScript do zero — instalar, configurar com strict mode, e tipar funções, objetos e interfaces com exemplos práticos.

Em outras palavras, se você sabe JavaScript e quer migrar pra TypeScript sem perder tempo com tutoriais desatualizados, está no lugar certo. Em seguida, mostramos por que toda equipe BR adotou TS, como o strict mode mudou o setup básico, e damos uma sneak peek do TypeScript Native em Go que a Microsoft anunciou em 2025.

Composicao editorial mixed-media zine-style com badge TypeScript TS azul grande centralizado sobre fundo papel off-white, rodeado por paper-cut labels handwritten: STATIC TYPING com gear icon, GENERICS T em angle brackets, INTERFACES com code icon, CLASSES MODULES com sticky note empilhada — visualizacao Wirecutter-style para artigo techknow sobre TypeScript para iniciantes
Os 4 pilares do TypeScript em destaque: tipagem estática, generics, interfaces e classes/módulos — o que toda equipe BR usa em 2026.

O que é TypeScript e por que toda stack BR adotou

TypeScript é um superset do JavaScript criado pela Microsoft em 2012. Por exemplo, ele adiciona um sistema de tipagem estática ao JS sem mudar a sintaxe — você escreve JavaScript “normal” e anota tipos opcionalmente. Em seguida, o compilador TypeScript (tsc) converte tudo pra JavaScript puro que roda em qualquer browser ou Node.

Por outro lado, “opcionalmente” virou “obrigatoriamente” na prática moderna. Em 2026, frameworks como Next.js, Nuxt, SvelteKit e Remix criam projetos novos com TypeScript por padrão. Por isso, se você quer trabalhar com frontend moderno, conhecer TS deixou de ser diferencial — virou requisito básico.

TypeScript vs JavaScript: a diferença em 1 exemplo

Em primeiro lugar, veja a diferença em código. No JavaScript puro, esse erro só aparece quando o usuário roda a aplicação:

Code
// ❌ JavaScript — erro só descoberto em runtime
function calcularTotal(preco, quantidade) {
  return preco * quantidade;
}

calcularTotal("10", 2); // retorna "1010" — string concatenada!
calcularTotal(10, "2"); // retorna "102"
calcularTotal();        // retorna NaN

Por outro lado, com TypeScript, o erro aparece antes mesmo de você rodar — o editor (VS Code, WebStorm, Cursor) sublinha em vermelho:

TypeScript
// ✅ TypeScript — erro detectado no editor
function calcularTotal(preco: number, quantidade: number): number {
  return preco * quantidade;
}

calcularTotal("10", 2); // ❌ Error: Argument of type 'string' is not assignable to parameter of type 'number'
calcularTotal(10, 2);   // ✅ retorna 20

Em outras palavras, TypeScript te avisa de bugs antes de virar bug em produção. Dessa forma, refactor fica mais seguro, autocomplete fica mais inteligente, e onboarding de novos devs fica mais rápido.

Instalando e configurando o primeiro projeto TypeScript

Em segundo lugar, instalar TypeScript leva menos de 3 minutos. Por exemplo, você precisa apenas de Node.js 18 ou superior instalado. Em seguida, abra o terminal e crie a pasta do projeto:

Code
# Cria projeto novo
mkdir meu-projeto-ts
cd meu-projeto-ts

# Inicializa package.json
npm init -y

# Instala TypeScript como dev dependency
npm install --save-dev typescript

# Gera tsconfig.json com strict mode default
npx tsc --init

tsconfig.json: por que strict mode é o default

Em terceiro lugar, ao rodar npx tsc --init em 2026, o arquivo tsconfig.json gerado já vem com "strict": true. Por exemplo, isso ativa 8 flags de segurança de tipos: noImplicitAny, strictNullChecks, strictFunctionTypes, entre outras. Em outras palavras, o TypeScript agora exige tipagem explícita por padrão — antes era opcional.

Code
// tsconfig.json gerado pelo tsc --init em 2026
{
  "compilerOptions": {
    "target": "es2022",
    "module": "esnext",
    "moduleResolution": "bundler",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,              // ← já é default em 2026
    "skipLibCheck": true,
    "noUncheckedIndexedAccess": true
  }
}

Por isso, tutoriais de 2-3 anos atrás que mandam você “ativar strict mode” estão desatualizados — já vem ligado. Dessa forma, foque em entender o que strict te protege: variáveis sem tipo explícito viram erro, valores null e undefined precisam ser tratados, parâmetros de função obrigam declaração de tipo.

Tipando variáveis e tipos primitivos

Em quarto lugar, TypeScript tem os mesmos tipos primitivos do JavaScript — só agora você anota explicitamente. Por exemplo:

TypeScript
// Tipos primitivos básicos
let nome: string = "Maria";
let idade: number = 28;
let isAdmin: boolean = true;
let salario: number | null = null; // union type — pode ser number OU null

// Arrays tipados
let frutas: string[] = ["maçã", "banana", "uva"];
let numeros: number[] = [1, 2, 3];

// Tuplas (array com tamanho e tipos fixos)
let coordenada: [number, number] = [10, 20];

// Enums (conjunto de constantes nomeadas)
enum StatusPedido {
  Pendente = "PENDENTE",
  Aprovado = "APROVADO",
  Cancelado = "CANCELADO"
}
let status: StatusPedido = StatusPedido.Aprovado;

Por outro lado, na maioria dos casos você não precisa anotar tipos primitivos manualmente — o TypeScript faz inferência de tipo. Por exemplo, let nome = "Maria" infere automaticamente string. Em outras palavras, anote tipos só quando a inferência não funcionar (parâmetros de função, retornos complexos, valores que mudam de forma).

Se você ainda não domina manipulação de arrays em JavaScript, vale revisar antes de avançar — TypeScript adiciona tipos por cima, mas os métodos (map, filter, reduce) continuam idênticos ao JS.

Tipando funções: parâmetros, retorno e opcionais

Em quinto lugar, funções são onde TypeScript brilha mais. Por exemplo, você anota tipo dos parâmetros e do retorno — assim, quem chama a função sabe exatamente o que entrega e o que recebe:

TypeScript
// Função básica com tipos
function somar(a: number, b: number): number {
  return a + b;
}

// Função com parâmetro opcional (note o ?)
function saudacao(nome: string, sobrenome?: string): string {
  if (sobrenome) {
    return `Olá, ${nome} ${sobrenome}!`;
  }
  return `Olá, ${nome}!`;
}

// Função com valor padrão
function calcularDesconto(preco: number, percentual: number = 10): number {
  return preco - (preco * percentual / 100);
}

// Arrow function tipada
const dobrar = (n: number): number => n * 2;

// Tipo de função reutilizável
type Calculadora = (a: number, b: number) => number;

const subtrair: Calculadora = (a, b) => a - b;
const multiplicar: Calculadora = (a, b) => a * b;

Em outras palavras, anotar tipos em funções vira documentação viva — quem usa não precisa abrir o código pra saber o que cada parâmetro espera. Por isso, qualquer função pública (exportada de um módulo) deve ter tipos explícitos.

Publicidade

Tipando objetos com type e interface

Em sexto lugar, chegou a hora do tema mais confuso pra iniciante: type vs interface. Por outro lado, as duas formas servem pra descrever a forma de um objeto. Por exemplo:

TypeScript
// Usando type alias
type Usuario = {
  id: number;
  nome: string;
  email: string;
  ativo: boolean;
};

// Usando interface
interface UsuarioInterface {
  id: number;
  nome: string;
  email: string;
  ativo: boolean;
}

// Uso é idêntico nos dois casos
function criarUsuario(dados: Usuario): Usuario {
  return { ...dados };
}

function criarUsuarioInterface(dados: UsuarioInterface): UsuarioInterface {
  return { ...dados };
}

type vs interface: qual usar e quando

Em primeiro lugar, na maioria dos casos as duas funcionam igual. Por outro lado, existem diferenças sutis que importam quando seu código cresce:

Critério type interface
Descreve forma de objeto ✅ Sim ✅ Sim
Union types (A | B) ✅ Sim ❌ Não
Tipos primitivos (type Idade = number) ✅ Sim ❌ Não
Extends / herança Via & intersection Via extends (mais limpo)
Declaration merging ❌ Não ✅ Sim (declarar a mesma interface 2x mescla)
Mensagens de erro Verbosas Mais legíveis

Em outras palavras, a regra prática:

  • Use interface para descrever objetos públicos (props de componentes React, retornos de API, contratos entre módulos)
  • Use type para tudo o resto (union types, intersection, tipos primitivos com alias, computed types)

Por isso, interfaces se relacionam diretamente com Clean Architecture (contratos entre camadas) e princípios SOLID no React (ISP — interfaces segregadas). Dessa forma, dominar interfaces te leva pro próximo nível como dev TypeScript.

Próximos passos: do iniciante ao próximo nível

Em suma, agora você sabe instalar TypeScript, configurar com strict mode, e tipar variáveis, funções, objetos e interfaces. Por outro lado, ainda há terreno pra explorar — generics, conditional types, mapped types, infer, decorators experimentais. Em seguida, mostramos os próximos passos prioritários.

TypeScript Native: o que muda com o port em Go (Microsoft 2025)

Em primeiro lugar, em março de 2025 a Microsoft anunciou o TypeScript Native — uma reescrita completa do compilador tsc em Go. Por exemplo, a promessa é de 10x mais performance em projetos grandes (Microsoft Office foi citado no anúncio como case de teste). Em outras palavras, o TS Native vai resolver o gargalo histórico do tsc em monorepos.

Por outro lado, o TS Native ainda não está em produção em junho de 2026 — está em RC. Por isso, na prática hoje continue usando tsc normal. Em seguida, fique de olho na release oficial — quando sair, a migração será automática (mesmas flags, mesma API).

Para aprofundar em TypeScript com referências canônicas, estes 2 livros da O’Reilly são leitura padrão das equipes seniores que usam TS profissionalmente:

Conclusão

Em suma, dominar TypeScript em 2026 deixou de ser opcional pra qualquer dev BR que quer trabalhar com frontend moderno. Por exemplo, React, Next.js, Vue e Svelte adotaram TS por padrão. Em outras palavras, conhecer o básico — tipar variáveis, funções, objetos e interfaces — é o mínimo de capacidade técnica esperada hoje.

Por outro lado, lembre que TypeScript é ferramenta, não dogma. Em primeiro lugar, use type pra union, intersection e primitivos com alias. Em segundo lugar, use interface pra contratos públicos (props, API responses, módulos). Por fim, deixe o tsc --init com strict mode default — esse é o caminho moderno.

Para o próximo nível, vale combinar TypeScript com princípios SOLID no React (TS protege seus tipos enquanto SOLID protege seu design) e estudar como Claude Code, Cursor e outras ferramentas de vibe coding escrevem TS nativamente — não é coincidência que ferramentas de IA agentic adotaram TypeScript como linguagem primária. Em seguida, considere ler o Handbook oficial em português pra aprofundar generics, utility types e conditional types.

Publicidade