How to run typescript-eslint on .ts files and eslint on .js files in the same project in VSCode

15,785

Solution 1

You need to override the configuration to use separate parsers for js and ts files. you can configure .eslintrc.js as below

module.exports = {
    root: true,    
    extends: [
      'eslint:recommended'
    ],
    "overrides": [
      {
        "files": ["**/*.ts", "**/*.tsx"],
        "env": { "browser": true, "es6": true, "node": true },
        "extends": [
          "eslint:recommended",
          "plugin:@typescript-eslint/eslint-recommended",
          "plugin:@typescript-eslint/recommended"
        ],
        "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly" },
        "parser": "@typescript-eslint/parser",
        "parserOptions": {
          "ecmaFeatures": { "jsx": true },
          "ecmaVersion": 2018,
          "sourceType": "module",
          "project": "./tsconfig.json"
        },
        "plugins": ["@typescript-eslint"],
        "rules": {
          "indent": ["error", 2, { "SwitchCase": 1 }],
          "linebreak-style": ["error", "unix"],
          "quotes": ["error", "single"],
          "comma-dangle": ["error", "always-multiline"],
          "@typescript-eslint/no-explicit-any": 0
        }
      }
    ]
  };

Sample Project is here

Solution 2

Use the overrides prop to have typescript-eslint's parser and related TS configuration only on .ts/.tsx files. For example (React, TypeScript, ES2021):

module.exports = {
  root: true,
  extends: ['eslint:recommended'],
  env: {
    browser: true,
    es2021: true,
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 12,
    sourceType: 'module',
  },
  overrides: [
    {
      files: ['**/*.ts', '**/*.tsx'],
      plugins: [
        '@typescript-eslint',
      ],
      extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
      parser: '@typescript-eslint/parser',
      parserOptions: {
        project: ['./tsconfig.json'],
      },
    },
  ],
};
Share:
15,785
Ben
Author by

Ben

Updated on June 30, 2022

Comments

  • Ben
    Ben almost 2 years

    I have a mixed codebase with javascript and typescript files. I'd like to have eslint run on .js files and typescript-eslint run on .ts files in VSCode.

    I've managed to configure my .eslintrc.json file to get typescript-eslint to run on .ts files. The problem is that it also ends up running typescript-eslint on .js files, instead of plain old eslint.

    This seems like it should be simple and fairly common, but I haven't been able to find a solution despite searching all over the internet.

  • Jason Turan
    Jason Turan about 4 years
    Thanks for the tip! I was struggling with this for a while.
  • writofmandamus
    writofmandamus almost 2 years
    In the example in the files override it mixes js and ts files: github.com/techatpark/npm-scripts-static-ref/blob/…