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.
ESLint is a JavaScript linter that you can use to lint either TypeScript or JavaScript code.
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.
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.
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
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'],
},
},
],
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With