Boas Práticas de TypeScript em Node.js
TypeScript compensa quando verificações rigorosas em tempo de compilação encontram validação em tempo de execução nas fronteiras - não quando any vaza através de resultados de ORM e corpos de requisição.
Busque em todas as páginas da documentação
TypeScript compensa quando verificações rigorosas em tempo de compilação encontram validação em tempo de execução nas fronteiras - não quando any vaza através de resultados de ORM e corpos de requisição.
allowJs.any ou @ts-ignore sem justificativa em ticket.tsc --noEmit e testes em CI - tipos sem testes ainda enviam bugs.strict: true para todos os novos projetos. Adicione flags mais rigorosas (noUncheckedIndexedAccess) quando a equipe estiver pronta.module / moduleResolution: NodeNext no Node 24 ESM. Corresponde ao resolvedor em tempo de execução.tsc --noEmit em CI em cada PR. tsx sozinho não verifica tipos.dist/ para contêineres de produção. CMD ["node", "dist/main.js"] - sem tsx na imagem de produção.typescript e @types/node em majors compatíveis. Alinhe @types/node com Node 24.process.env com Zod na inicialização. Falhe antes de escutar em uma porta.as Foo em req.body.z.infer - sem interfaces duplicadas. Fonte única de verdade.unknown até serem analisadas. Mesmo de fornecedores confiáveis.import type para imports apenas de tipos. Habilite verbatimModuleSyntax em novos repositórios.any - use unknown + estreitamento. ESLint @typescript-eslint/no-explicit-any como erro.!) a testes. Código de produção usa guards ou Zod.{ ok: true, value } | { ok: false, error }.@ts-ignore - use @ts-expect-error com ticket e data de remoção.Request do Express apenas para campos transversais. Genéricos por rota para corpo/parâmetros.Promise<void>. Garanta que erros alcancem os hooks de erro do framework.@acme/api-types..js em diretórios tipados. allowJs é temporário.node:test precocemente. Testes travam o comportamento durante a renomeação de JS para TS.node:*. Seguro para bundlers React.Raramente - "escape hatches" de terceiros com um wrapper de estreitamento imediato. Nunca na lógica de domínio.
Recomendado para novo código - captura arr[i] indefinido. Barulhento em código existente (brownfield) - habilite por diretório.
Sim - TS para desenvolvedores, Zod para dados em tempo de execução que cruzam fronteiras de confiança.
Aplicativos privados podem pular a publicação de .d.ts - bibliotecas e pacotes de tipos compartilhados precisam deles.
Tipos do Prisma são moldados pelo banco de dados - mapeie para DTOs antes das respostas HTTP.
Inclua **/*.test.ts no tsconfig principal ou use um tsconfig.test.json separado - ambos devem ser verificados em tipo no CI.
strict + regras equivalentes de noImplicitAny do ESLint da configuração recomendada de tipos do typescript-eslint.
Sim - config satisfies Config valida literais de objeto sem alargamento - ótimo para mapas de configuração estática.
Prefira as const + uniões ou enums Zod - melhor tempo de execução e tree shaking do que enum do TS.
Alinhe as versões - a incompatibilidade causa tipagens de handler incorretas.
Use um tsconfig.strict.json secundário com glob de inclusão - expanda mensalmente até que a configuração principal cubra todo o src.
Zod nas Fronteiras - padrões canônicos de ambiente e corpo.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026