Eslint Config for Next.js + TypeScript Project

A ready-to-use configuration template for ESLint tailored for Next.js and TypeScript projects.

ESLint is a powerful tool for catching errors and maintaining a consistent code style in your Next.js + TypeScript projects. In this guide, we’ll walk through the process of setting up ESLint with a ready-to-use configuration tailored for optimal development.

Install Dependencies

Begin by installing the necessary ESLint dev dependencies. Each package serves a specific purpose in enhancing your development workflow.

Terminal window
npm install --save-dev @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint eslint-config-next eslint-plugin-unused-imports

The Configuration

Configure ESLint with the following settings. The accompanying comments explain the purpose of key rules and settings.

.eslintrc.cjs
/** @type {import("eslint").Linter.Config} */
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: true,
},
plugins: ['@typescript-eslint', 'unused-imports'],
extends: [
'plugin:@next/next/recommended',
'plugin:@typescript-eslint/recommended-type-checked',
'plugin:@typescript-eslint/stylistic-type-checked',
],
rules: {
'@typescript-eslint/array-type': 'off',
'@typescript-eslint/consistent-type-definitions': 'off',
'@typescript-eslint/consistent-type-imports': [
'warn',
{
prefer: 'type-imports',
fixStyle: 'inline-type-imports',
},
],
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
'@typescript-eslint/require-await': 'off',
'@typescript-eslint/no-misused-promises': [
'error',
{
checksVoidReturn: { attributes: false },
},
],
'unused-imports/no-unused-imports': 'warn',
'unused-imports/no-unused-vars': [
'warn',
{
vars: 'all',
varsIgnorePattern: '^_',
args: 'after-used',
argsIgnorePattern: '^_',
},
],
},
};

Here’s an explanation of each section:

parser and parserOptions

The configuration specifies the use of @typescript-eslint/parser as the parser for ESLint, indicating compatibility with TypeScript. Additionally, parserOptions is configured with project: true, instructing ESLint to utilize the TypeScript project’s configuration.

Plugins

The configuration includes two ESLint plugins, @typescript-eslint and unused-imports. These plugins extend ESLint’s capabilities by providing TypeScript-specific rules and detecting unused imports and variables.

Extensions

The extends section extends the rule set with recommended configurations from Next.js (plugin:@next/next/recommended) and TypeScript (plugin:@typescript-eslint/recommended-type-checked, plugin:@typescript-eslint/stylistic-type-checked). This ensures compatibility with Next.js best practices and incorporates type-checking and stylistic conventions for TypeScript.

Rule Configurations

The rules section customizes ESLint’s behavior with specific rule configurations. Notable examples include turning off rules like @typescript-eslint/array-type and @typescript-eslint/consistent-type-definitions. The rule @typescript-eslint/consistent-type-imports is set to warn, encouraging the use of type-imports with a fix option to convert to inline-type-imports.

Additional Rules

In addition to TypeScript-specific rules, the configuration integrates rules from the unused-imports plugin. These rules aim to identify and warn about unused imports and variables, promoting a cleaner codebase.

Categories : eslintnext.jstypescript