Typing Node24 ESM TS Server
Objetivo
Padronizar tipagem robusta no projeto com foco em Node 24 + ESM + NodeNext, mantendo compatibilidade estrita com TS Server e reduzindo ruído em typecheck:node.
Quando usar
- •Estabilizar
npm run typecheck:node. - •Corrigir pacotes de erros TS/JS com
allowJs + checkJs. - •Definir padrão de JSDoc e
.d.tspara módulos JS. - •Revisar compatibilidade entre
tsconfig.json(canônico) ejsconfig.json(shim). - •Preparar terreno para endurecer
strictprogressivamente sem quebrar runtime.
Contrato canônico de tipagem (este repositório)
- •
tsconfig.jsoné a fonte de verdade. - •
jsconfig.jsonexiste por compatibilidade de tooling/editor e deve herdartsconfig.json. - •Runtime alvo: Node 24 ESM.
- •Resolução de módulos:
module=NodeNextemoduleResolution=NodeNext. - •Import ESM relativo deve usar extensão explícita
.js. - •Não misturar
require/module.exportsem arquivo ESM. - •Tipagem em JS é via JSDoc e augmentations em
src/types/**.
Workflow operacional
- •Preflight semântico de tooling.
- •
npm run -s lsp:health - •
npm run -s mcp:diagnose
- •Baseline de tipagem (Node/Audit).
- •
npm run -s typecheck:node - •Se necessário, coletar saída detalhada:
npx tsc -p tsconfig.json --pretty false --extendedDiagnostics
- •Triage por classes de erro (ordem obrigatória).
- •
TS2307/TS2835: resolução/import ESM (.js, aliases#*, paths). - •
TS2339/TS2322: contrato de objeto e narrowing. - •
TS7006/TS7031: parâmetros implícitosany(JSDoc@param). - •
TS2554/TS2345: assinaturas inconsistentes entre chamada e definição. - •
TS2688/TS7016: tipos ausentes para pacote externo ou módulo interno.
- •Correção padronizada.
- •Preferir corrigir em origem (assinatura/fonte) antes de cast local.
- •Em JS, usar
@typedef,@param,@returns,@template,@satisfies. - •Para globais/augmentações, concentrar em
src/types/**/*.d.ts. - •Evitar
@ts-ignore; quando inevitável, usar@ts-expect-errorcom justificativa curta.
- •Validação de fechamento.
- •
npm run -s lint - •
npm run -s typecheck:node - •
npm run -s test:unit
Padrões de implementação recomendados
- •Tipos de payload/evento: declarar typedef local e reutilizar em callbacks.
- •Objetos de config: validar shape com
@satisfies {import('...').Type}quando aplicável. - •APIs assíncronas: sempre retornar
Promise<T>coerente com consumidor. - •Adapters/bridges: tipar contratos de entrada/saída antes da lógica.
Guardrails
- •Não alterar
module/moduleResolutionfora deNodeNext. - •Não introduzir CommonJS em caminhos ESM.
- •Não mascarar lote de erros com disable global (
checkJs=false,skipProjectetc.). - •Não tratar warning de editor como exceção sem reproduzir em
tsc -p tsconfig.json.
Estratégia de endurecimento progressivo
- •Manter
typecheckpadrão focado em Node/Audit. - •Corrigir pacotes por domínio (
src/core,src/server,src/driver,scripts/audit). - •Após estabilidade, subir rigor seletivo:
- •ativar flags mais restritivas por pacote/arquivo;
- •reduzir uso de casts frágeis;
- •migrar typedefs repetidos para módulos de tipos compartilhados.
Referências locais desta skill
- •
references/tsserver-contract.md - •
references/jsdoc-node24-patterns.md - •
references/error-triage-playbook.md
Done criteria
- •
npm run -s typecheck:nodecom exit0. - •Sem regressão em
lintetest:unit. - •Imports ESM e contratos JSDoc coerentes com NodeNext.
- •Novos tipos centralizados e reutilizáveis (sem duplicação desnecessária).