Noções Básicas de Linting
8 exemplos para você começar com Linting e Formatação - 6 básicos e 2 intermediários.
Pré-requisitos
- Projeto Node.js 24.18.0 com TypeScript 5.6+.
- Instale a pilha de configuração plana do ESLint 9:
npm install -D eslint@9 typescript-eslint @eslint/jsExemplos Básicos
1. Configuração Plana Mínima do ESLint
O ESLint 9 usa eslint.config.js (ou .mjs) em vez do legado .eslintrc.
// eslint.config.js
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
{
ignores: ["dist/**", "node_modules/**"],
}
);- A configuração plana é um array de objetos de configuração mesclados em ordem.
ignoressubstitui.eslintignore.typescript-eslintagrupa o parser e o plugin para TS.
2. Adicionar Script de Lint
Integre o lint ao fluxo de trabalho diário e à CI.
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}- Execute
npm run lintantes do push; falhe a CI em caso de erros. --fixlida com a ordem de importação e regras de estilo simples automaticamente.
Relacionado: Melhores Práticas de Linting - política de zero avisos
3. Regras Cientes de Tipos
Ative o lint com verificação de tipos para maior correção.
export default tseslint.config(
...tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
}
);projectService(TS 5.6+) simplifica a configuração deparserOptions.project.- Regras cientes de tipos capturam promessas flutuantes e uso inseguro de
any. - Um pouco mais lento; limite a
src/**se necessário.
4. Globais do Node e ESM
Informe ao ESLint que você está executando no Node com módulos ES.
{
files: ["**/*.ts"],
languageOptions: {
ecmaVersion: 2022,
sourceType: "module",
globals: {
...globals.node,
},
},
}npm install -D globalssourceType: "module"corresponde a"type": "module"empackage.json.- Evita falsos positivos em
no-undefparaprocesseBuffer.
5. Banir console.log em Código de Produção
Mantenha os logs estruturados através do seu logger, não console bruto em src/.
{
files: ["src/**/*.ts"],
rules: {
"no-console": ["error", { allow: ["warn", "error"] }],
},
}- Testes e scripts podem usar um bloco de configuração separado com
no-console: off. - Combine com Pino ou logger da organização no código da aplicação.
Relacionado: Integração com Prettier - formatação separada do lint
6. Fazer Lint de Arquivos de Teste Separadamente
Relaxe as regras onde mocks e any são comuns.
{
files: ["test/**/*.ts", "**/*.test.ts"],
rules: {
"@typescript-eslint/no-explicit-any": "off",
"no-console": "off",
},
}- Testes se beneficiam do pragmatismo;
src/de produção permanece rigoroso. - Ainda proíbe variáveis não utilizadas em testes para capturar código de configuração morto.
Exemplos Intermediários
7. Configuração Raiz de Monorepo
Compartilhe uma única configuração do ESLint entre workspaces.
// eslint.config.js (root)
import base from "./packages/eslint-config/index.js";
export default [
...base,
{
files: ["apps/api/**/*.ts"],
rules: { "no-console": "error" },
},
];- Extraia a configuração compartilhada para
packages/eslint-configpara reutilização. - Os aplicativos estendem apenas com substituições específicas do serviço.
Relacionado: Limites de Importação - regras arquitetônicas
8. Gate de Lint na CI
Falhe PRs em erros e avisos de lint se você adotar a política de zero avisos.
- run: npm ci
- run: npm run lint -- --max-warnings 0--max-warnings 0transforma avisos em falhas.- Execute o lint após a instalação, em paralelo com a verificação de tipos para velocidade.
Relacionado: Verificação de Tipos na CI - gate complementar
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.