Documentação com TypeDoc
1. Introdução ao TypeDoc e sua Integração com TypeScript
TypeDoc é uma ferramenta de geração de documentação projetada especificamente para projetos TypeScript. Diferentemente do JSDoc, que foi criado para JavaScript e adaptado posteriormente, o TypeDoc entende nativamente o sistema de tipos do TypeScript, incluindo genéricos, tipos condicionais, utilitários de tipo e módulos ES.
Enquanto o JSDoc exige anotações manuais para tipos complexos, o TypeDoc infere automaticamente a maioria das informações a partir do código-fonte. Já o Docusaurus é um gerador de sites de documentação mais geral, que pode ser combinado com TypeDoc para criar portais completos, mas não substitui a geração automática baseada em código.
Para instalar e configurar:
npm install typedoc --save-dev
Crie um arquivo typedoc.json na raiz do projeto:
{
"entryPoints": ["src/index.ts"],
"out": "docs",
"tsconfig": "tsconfig.json"
}
Execute com:
npx typedoc
2. Anatomia dos Comentários TypeDoc
A documentação utiliza blocos de comentário /** ... */. Tags especiais controlam o que é gerado:
/**
* Calcula o valor total com impostos aplicados.
*
* @param valor - Valor base do produto em reais
* @param aliquota - Percentual do imposto (ex: 0.18 para 18%)
* @returns O valor final com imposto incluso
* @throws {RangeError} Se a aliquota for negativa
*
* @example
* ```typescript
* const total = calcularImposto(100, 0.18);
* console.log(total); // 118
* ```
*/
function calcularImposto(valor: number, aliquota: number): number {
if (aliquota < 0) throw new RangeError("Alíquota não pode ser negativa");
return valor * (1 + aliquota);
}
Tags avançadas incluem:
/**
* Representa uma entidade persistente no banco de dados.
*
* @category Modelos
* @group Entidades
* @deprecated Use {@link EntidadeBase} em novos projetos
*/
interface Entidade {
id: string;
}
3. Documentando Tipos e Interfaces Complexas
Para tipos genéricos, use @typeParam para documentar o parâmetro de tipo:
/**
* Cache tipado com suporte a expiração.
*
* @typeParam T - Tipo dos valores armazenados no cache
* @typeParam K - Tipo da chave (padrão: string)
*/
class Cache<T, K extends string = string> {
private dados = new Map<K, T>();
/**
* @param chave - Identificador único
* @param valor - Dado a ser armazenado
* @param ttlMs - Tempo de vida em milissegundos
*/
set(chave: K, valor: T, ttlMs: number): void {
// implementação
}
}
Propriedades de objetos literais são documentadas com @property:
/**
* Configuração para conexão com banco de dados.
*
* @property host - Endereço do servidor
* @property porta - Número da porta (padrão: 5432)
* @property credenciais - Objeto com usuário e senha
*/
type ConfigDB = {
host: string;
porta?: number;
credenciais: { usuario: string; senha: string };
};
Referências cruzadas com @link e @see:
/**
* Processa um pedido e atualiza o estoque.
*
* @see {@link Estoque.atualizar} para detalhes da atualização
* @see [Documentação de Pedidos](https://docs.exemplo.com/pedidos)
*
* @link https://api.exemplo.com/pedidos
*/
function processarPedido(pedido: Pedido): Resultado {
// implementação
}
4. Configuração e Personalização do TypeDoc
O arquivo typedoc.json oferece diversas opções de customização:
{
"entryPoints": ["src/index.ts", "src/componentes/index.ts"],
"out": "docs",
"tsconfig": "tsconfig.json",
"excludePrivate": true,
"excludeProtected": false,
"includeVersion": true,
"categorizeByGroup": true,
"defaultCategory": "Geral",
"plugin": [
"typedoc-plugin-markdown",
"typedoc-plugin-missing-exports"
]
}
Plugins oficiais importantes:
- typedoc-plugin-markdown: Gera documentação em formato Markdown em vez de HTML
- typedoc-plugin-missing-exports: Adiciona símbolos não exportados à documentação
Para temas personalizados, você pode usar temas de terceiros como typedoc-theme-dark ou criar o seu próprio estendendo o tema padrão.
5. Geração de Documentação para Monorepos
Em monorepos com múltiplos pacotes, configure diferentes entry points:
{
"entryPointStrategy": "packages",
"entryPoints": ["packages/*"],
"out": "docs"
}
Use @packageDocumentation para documentar cada pacote individualmente:
/**
* @packageDocumentation
* Módulo de autenticação do sistema.
*
* Este pacote fornece funcionalidades de login, registro e
* gerenciamento de sessões usando JWT.
*/
Para integração com Turborepo, configure scripts em cada pacote:
// packages/auth/package.json
{
"scripts": {
"typedoc": "typedoc --options typedoc.json"
}
}
E no turbo.json:
{
"pipeline": {
"typedoc": {
"dependsOn": ["^build"],
"outputs": ["docs/**"]
}
}
}
Para geração consolidada, crie um script na raiz:
turbo run typedoc --parallel
npx typedoc --entryPointStrategy packages --entryPoints packages/*
6. Validação e Qualidade da Documentação
TypeDoc pode validar a completude da documentação durante a geração:
npx typedoc --validation
Configure regras específicas no typedoc.json:
{
"validation": {
"notDocumented": true,
"invalidLink": true,
"notExported": false
},
"treatWarningsAsErrors": true,
"intentionallyNotExported": [
"InternalHelper"
]
}
Isso faz com que símbolos públicos não documentados gerem erros, garantindo que toda API pública tenha documentação.
Integração com CI/CD (exemplo GitHub Actions):
- name: Verificar documentação
run: npx typedoc --validation --treatWarningsAsErrors
Se a documentação estiver incompleta, o pipeline falha, impedindo deploys com documentação insuficiente.
7. Publicação e Versionamento da Documentação
Para gerar um site estático e publicar no GitHub Pages:
npx typedoc
# Os arquivos HTML serão gerados na pasta "docs"
Configure o GitHub Pages para servir a partir da branch gh-pages ou da pasta docs na branch principal.
Para versionamento com tags Git:
git tag v1.0.0
npx typedoc --gitRevision v1.0.0
Isso adiciona links para o código-fonte na versão correta.
Automação completa com GitHub Actions:
name: Publicar Documentação
on:
release:
types: [published]
jobs:
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx typedoc --gitRevision ${{ github.ref_name }}
- uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs
Este workflow gera e publica automaticamente a documentação sempre que uma nova release é criada, com links apontando para o código daquela versão específica.
TypeDoc transforma seu código TypeScript em documentação rica e navegável, reduzindo drasticamente o esforço manual de documentação enquanto mantém a precisão técnica. Combinado com validação em CI/CD e publicação automatizada, ele se torna uma peça fundamental para manter projetos TypeScript bem documentados e fáceis de usar.
Referências
- Documentação Oficial do TypeDoc — Guia completo de instalação, configuração e uso de todas as funcionalidades
- TypeDoc no GitHub — Repositório oficial com issues, discussões e exemplos de configuração
- Plugins do TypeDoc — Lista oficial de plugins mantidos pela comunidade e pela equipe do TypeDoc
- Tutorial: Gerando Documentação TypeScript com TypeDoc — Guia prático da DigitalOcean cobrindo instalação, tags e deploy
- TypeDoc com Monorepos e Turborepo — Documentação oficial do Turborepo sobre integração com TypeDoc em monorepos
- Validação de Documentação com TypeDoc — Artigo técnico sobre configuração de validação e qualidade no TypeDoc