tsconfig.json: as opções que realmente importam
1. Introdução ao tsconfig.json
O arquivo tsconfig.json é o coração da configuração do TypeScript. Ele informa ao compilador tsc como processar seu código, quais arquivos incluir, para qual versão do JavaScript compilar e quais regras de tipo aplicar. Quando você executa tsc sem argumentos, o compilador procura automaticamente por um tsconfig.json no diretório raiz do projeto.
A estrutura básica do arquivo contém três seções principais:
{
"compilerOptions": {
// Opções do compilador
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
compilerOptions: Define como o TypeScript compila o códigoinclude: Padrões de arquivos a serem incluídosexclude: Padrões de arquivos a serem ignoradosfiles: Lista explícita de arquivos (alternativa aoinclude)
2. Controle de Saída e Compatibilidade
As opções de saída determinam como seu código TypeScript será transformado em JavaScript executável.
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"outDir": "./dist",
"rootDir": "./src"
}
}
target: Define a versão ECMAScript de saída.ES5para máxima compatibilidade,ES2020para projetos modernos,ESNextpara usar os recursos mais recentesmodule: Sistema de módulos.CommonJSpara Node.js,ESNextpara bundlers modernos,UMDpara bibliotecas universaisoutDir: Diretório onde os arquivos compilados serão salvosrootDir: Diretório raiz do código fonte, usado para preservar a estrutura de diretórios na saída
3. Rigidez e Segurança de Tipos
O modo estrito é essencial para aproveitar todo o potencial do TypeScript.
{
"compilerOptions": {
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"strictFunctionTypes": true,
"strictBindCallApply": true
}
}
strict: Ativa todas as verificações de tipo rigorosas, incluindostrictNullChecksenoImplicitAnynoUnusedLocals: Gera erro para variáveis locais não utilizadasnoUnusedParameters: Gera erro para parâmetros de função não utilizadosstrictFunctionTypes: Garante segurança em tipos de funções, especialmente em callbacksstrictBindCallApply: Verifica tipos corretamente embind,calleapply
4. Resolução de Módulos e Paths
Uma configuração adequada de resolução de módulos evita imports confusos e facilita a manutenção.
{
"compilerOptions": {
"moduleResolution": "bundler",
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"@components/*": ["src/components/*"]
},
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
}
}
moduleResolution:nodepara projetos Node.js tradicionais,bundlerpara projetos com Vite/WebpackbaseUrl: Diretório base para resolução de módulos não relativospaths: Cria aliases para imports limpos, comoimport { Button } from '@components/Button'esModuleInterop: Permite importar módulos CommonJS como módulos ESallowSyntheticDefaultImports: Permite imports padrão de módulos sem export default
5. Suporte a JavaScript e Declarações
Essas opções são cruciais para migração gradual e criação de bibliotecas.
{
"compilerOptions": {
"allowJs": true,
"checkJs": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true
}
}
allowJs: Permite compilar arquivos JavaScript junto com TypeScriptcheckJs: Realiza verificação de tipo em arquivos JavaScriptdeclaration: Gera arquivos.d.tscom as declarações de tipodeclarationMap: Cria mapas de origem para os arquivos.d.tssourceMap: Gera arquivos.mappara depuração no navegador
6. Otimizações e Performance
Em projetos grandes, essas opções podem reduzir drasticamente o tempo de compilação.
{
"compilerOptions": {
"skipLibCheck": true,
"incremental": true,
"tsBuildInfoFile": "./.tsbuildinfo",
"removeComments": true,
"noEmitOnError": true
}
}
skipLibCheck: Ignora checagem de tipos em arquivos de declaração (node_modules), acelerando a compilaçãoincremental: Habilita compilação incremental, reutilizando informações de compilações anteriorestsBuildInfoFile: Define onde salvar o arquivo de informações de build incrementalremoveComments: Remove comentários do código compiladonoEmitOnError: Não gera arquivos de saída se houver erros de compilação
7. Configurações Avançadas e Projetos Monorepo
Para projetos complexos e monorepos, estas opções são indispensáveis.
{
"compilerOptions": {
"composite": true,
"forceConsistentCasingInFileNames": true,
"isolatedModules": true,
"resolveJsonModule": true,
"downlevelIteration": true
},
"references": [
{ "path": "./packages/core" },
{ "path": "./packages/utils" }
]
}
references: Permite dividir o projeto em sub-projetos comcomposite: trueforceConsistentCasingInFileNames: Garante que nomes de arquivos usem caixa consistenteisolatedModules: Garante que cada arquivo pode ser compilado isoladamenteresolveJsonModule: Permite importar arquivos JSON como módulosdownlevelIteration: Fornece suporte a iteradores em versões mais antigas do JavaScript
8. Boas Práticas e Exemplos Práticos
Checklist para novo projeto TypeScript:
- [ ]
strict: true— Sempre ative o modo estrito - [ ]
target: "ES2020"ou superior — Use versões modernas - [ ]
module: "ESNext"— Para projetos com bundler - [ ]
skipLibCheck: true— Acelera a compilação - [ ]
esModuleInterop: true— Evita problemas com imports - [ ]
forceConsistentCasingInFileNames: true— Consistência entre sistemas
Exemplo para aplicação web (React/Vite):
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "bundler",
"strict": true,
"jsx": "react-jsx",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
Exemplo para biblioteca Node.js:
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"moduleResolution": "node",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src"],
"exclude": ["node_modules", "dist", "**/*.test.ts"]
}
Dominar o tsconfig.json é essencial para extrair o máximo de produtividade e segurança do TypeScript. Cada opção tem seu propósito, e entender quando e por que usá-las transforma seu fluxo de desenvolvimento.
Referências
- Documentação Oficial do tsconfig.json (TypeScript) — Referência completa de todas as opções de configuração do compilador TypeScript
- TypeScript Handbook: tsconfig.json — Guia oficial explicando a estrutura e uso do arquivo de configuração
- Configuring TypeScript (TypeScript Deep Dive) — Livro online gratuito com explicações detalhadas sobre configuração TypeScript
- TypeScript Project References — Documentação oficial sobre referências de projeto e monorepos
- TypeScript Compiler Options Explained — Guia oficial detalhando cada opção do compilador com exemplos práticos