Readme
TypeScript é o JavaScript com um sistema de tipos por cima. Todo o resto do guia continua valendo aqui: nomes que dizem a intenção, cláusulas de proteção no início da função, funções pequenas, fluxo que se lê de cima para baixo.
O que estas páginas cobrem é o que só existe em TypeScript. Quando escrever o tipo e quando deixar o compilador inferir. Como nomear um contrato. Como modelar um valor que tem formas diferentes. E como usar o sistema de tipos para o compilador acusar o erro antes de ele chegar no usuário, sem encher o código de anotação que não informa nada.
→ Referência rápida: nomes, type e interface, tipos utilitários, estreitamento de tipo
Setup
Configuração inicial de um projeto TypeScript: compilador, estrutura e ferramentas.
| Tópico | Conceitos |
|---|---|
| Fundação do projeto | tsconfig, modo estrito, apelidos de caminho, pipeline |
| Vite | Variáveis de ambiente, apelido de caminho, proxy do servidor local, divisão do pacote |
Fundamentos
| Tópico | Conceitos |
|---|---|
| Variáveis | Anotação, inferência, as const, unknown no lugar de any |
| Nomes | Interface, apelido de tipo e genérico: como nomear cada um |
| Funções | Tipo de retorno, parâmetros tipados, sobrecargas |
| Tipos | type e interface, genéricos, tipos utilitários |
| Estreitamento de tipo | Checagens que estreitam, uniões discriminadas, exaustividade |
| Controle de fluxo | A checagem que estreita o tipo, o switch exaustivo |
| Densidade visual | Passos separados, return junto do valor, anotação na mesma linha |
Avançados
| Tópico | Conceitos |
|---|---|
| Tratamento de erros | Erros com tipo, classe base, try/catch nos limites |
| Código assíncrono | Promise<T>, async/await tipado, genérico no cliente de I/O |
| Performance | as const no lugar do enum, satisfies, tipos recursivos |
| Observabilidade | Logger tipado, contexto de correlação, níveis de log |
| Testes | Massa de teste com satisfies, mocks tipados, expectTypeOf |
| Validação | z.infer, safeParse, união discriminada, DTO de resposta |
| Datas | Tipo marcado para timestamps, a API Temporal tipada |
| Modelagem de entidades | Tipo marcado, lista somente leitura, união discriminada, Entity<TId>, fábrica |
| Referência rápida | Tipos, utilitários, o que evitar |
Frameworks
| Framework | Conceitos |
|---|---|
| React + Next.js | RSC, RCC, Server Actions, API Routes, caching, guards, formulários com Zod |
| React SPA | TanStack Router, TanStack Query, Zustand: o dado do servidor e o dado do navegador |
| TanStack Table | Colunas tipadas, ordenação, paginação no servidor, virtualização |
| Angular | Standalone, Signals, Smart/Dumb, guards, resolvers, formulários tipados, interceptors |
| Vue + Nuxt | <script setup>, Composition API, Pinia, Route Middleware, Server Routes, defineCachedEventHandler |
Princípios
Tipos: quando anotar, quando inferir
| Princípio | Descrição |
|---|---|
| Inferência por padrão | Deixe o compilador derivar o tipo óbvio; a anotação repetida só ocupa espaço |
| Anotar os limites | Toda função exportada declara o tipo que devolve |
| Nunca any | unknown obriga a checar antes de usar; any desliga o compilador |
| Tipos sem prefixo | Sem I em interface: a palavra interface já está ali |
Contratos: types, interfaces e modelos de domínio
| Princípio | Descrição |
|---|---|
| Interface para objetos | O contrato e a forma de um objeto usam interface, que aceita extends |
| Type para uniões | type para união, interseção e apelido de primitivo |
| União no lugar do enum | Objeto as const com o union derivado: não sobra código no arquivo final |
| Genérico com propósito | Genérico quando o retorno depende do tipo que entrou |
Estreitamento de tipo: chegar ao tipo específico com segurança
| Princípio | Descrição |
|---|---|
| Função predicado com nome | Uma função value is T no lugar do as escrito no meio do código |
| União discriminada | O campo literal diz qual é o formato, e o switch estreita o tipo sozinho |
| Verificação de exaustividade | never no default: o compilador acusa o caso que ninguém tratou |
DoDocs v3.7.0 · Desenvolvido por @thiagocajadev · Baseado no trabalho de pmndrs/docs · Poimandres.