Readme

TypeScript

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ópicoConceitos
Fundação do projetotsconfig, modo estrito, apelidos de caminho, pipeline
ViteVariáveis de ambiente, apelido de caminho, proxy do servidor local, divisão do pacote

Fundamentos

TópicoConceitos
VariáveisAnotação, inferência, as const, unknown no lugar de any
NomesInterface, apelido de tipo e genérico: como nomear cada um
FunçõesTipo de retorno, parâmetros tipados, sobrecargas
Tipostype e interface, genéricos, tipos utilitários
Estreitamento de tipoChecagens que estreitam, uniões discriminadas, exaustividade
Controle de fluxoA checagem que estreita o tipo, o switch exaustivo
Densidade visualPassos separados, return junto do valor, anotação na mesma linha

Avançados

TópicoConceitos
Tratamento de errosErros com tipo, classe base, try/catch nos limites
Código assíncronoPromise<T>, async/await tipado, genérico no cliente de I/O
Performanceas const no lugar do enum, satisfies, tipos recursivos
ObservabilidadeLogger tipado, contexto de correlação, níveis de log
TestesMassa de teste com satisfies, mocks tipados, expectTypeOf
Validaçãoz.infer, safeParse, união discriminada, DTO de resposta
DatasTipo marcado para timestamps, a API Temporal tipada
Modelagem de entidadesTipo marcado, lista somente leitura, união discriminada, Entity<TId>, fábrica
Referência rápidaTipos, utilitários, o que evitar

Frameworks

FrameworkConceitos
React + Next.jsRSC, RCC, Server Actions, API Routes, caching, guards, formulários com Zod
React SPATanStack Router, TanStack Query, Zustand: o dado do servidor e o dado do navegador
TanStack TableColunas tipadas, ordenação, paginação no servidor, virtualização
AngularStandalone, 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ípioDescrição
Inferência por padrãoDeixe o compilador derivar o tipo óbvio; a anotação repetida só ocupa espaço
Anotar os limitesToda função exportada declara o tipo que devolve
Nunca anyunknown obriga a checar antes de usar; any desliga o compilador
Tipos sem prefixoSem I em interface: a palavra interface já está ali

Contratos: types, interfaces e modelos de domínio

PrincípioDescrição
Interface para objetosO contrato e a forma de um objeto usam interface, que aceita extends
Type para uniõestype para união, interseção e apelido de primitivo
União no lugar do enumObjeto as const com o union derivado: não sobra código no arquivo final
Genérico com propósitoGenérico quando o retorno depende do tipo que entrou

Estreitamento de tipo: chegar ao tipo específico com segurança

PrincípioDescrição
Função predicado com nomeUma função value is T no lugar do as escrito no meio do código
União discriminadaO campo literal diz qual é o formato, e o switch estreita o tipo sozinho
Verificação de exaustividadenever 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.