Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 223
Ben Avatar asked Aug 21 '19 18:08

Ben


People also ask

Can I use ESLint with TypeScript?

ESLint is a JavaScript linter that you can use to lint either TypeScript or JavaScript code.

What is TypeScript ESLint ESLint plugin?

ESLint is an awesome linter for JavaScript code. It allows creating a series of assertions called lint rules around what your code should look or behave like, as well as auto-fixer suggestions to improve your code for you, and loading in lint rules from shared plugins.

Should I use ESLint or TSLint?

I suggest do not use TsLint because it's deprecated and EsLint have more linting features than TsLint . Show activity on this post. TSLint can only be used for TypeScript, while ESLint supports both JavaScript and TypeScript. It is likely, within a large project that you may use both JavaScript and TypeScript.


2 Answers

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

like image 159
Sathish Kumar Thiyagarajan Avatar answered Oct 16 '22 13:10

Sathish Kumar Thiyagarajan


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'],
      },
    },
  ],
};
like image 4
Hugo Elhaj-Lahsen Avatar answered Oct 16 '22 14:10

Hugo Elhaj-Lahsen