eslint version conflict with TypeScript — how to fix

# ESLint 9 (flat config) — use latest @typescript-eslint
npm install --save-dev eslint@^9 @typescript-eslint/parser@^8 @typescript-eslint/eslint-plugin@^8

# ESLint 8 (legacy config) — use v6
npm install --save-dev eslint@^8 @typescript-eslint/parser@^6 @typescript-eslint/eslint-plugin@^6
npm ERR! peer eslint@"^8.56.0" from @typescript-eslint/eslint-plugin@6.21.0
npm ERR! node_modules/@typescript-eslint/eslint-plugin
npm ERR!   Conflicting peer dependency: eslint@8.57.1

ESLint and @typescript-eslint must be at compatible major versions.

Check current installed versions

npm ls eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin

ESLint 9 flat config — eslint.config.js

// eslint.config.js (ESLint 9)
import tseslint from 'typescript-eslint';

export default tseslint.config(
  ...tseslint.configs.recommended
);

ESLint 8 legacy config — .eslintrc.json

// .eslintrc.json (ESLint 8)
{
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"],
  "extends": ["plugin:@typescript-eslint/recommended"]
}