@octogonz/eslint-plugin v2.0.0-fork.2
Installation
Make sure you have TypeScript and @typescript-eslint/parser installed, then install the plugin:
npm i @typescript-eslint/eslint-plugin --save-dev
It is important that you use the same version number for @typescript-eslint/parser
and @typescript-eslint/eslint-plugin
.
Note: If you installed ESLint globally (using the -g
flag) then you must also install @typescript-eslint/eslint-plugin
globally.
Usage
Add @typescript-eslint/parser
to the parser
field and @typescript-eslint
to the plugins section of your .eslintrc
configuration file:
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"]
}
Then configure the rules you want to use under the rules section.
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"rules": {
"@typescript-eslint/rule-name": "error"
}
}
You can also enable all the recommended rules for our plugin. Add plugin:@typescript-eslint/recommended
in extends:
{
"extends": ["plugin:@typescript-eslint/recommended"]
}
You can also use eslint:recommended with this plugin. Add both eslint:recommended
and plugin:@typescript-eslint/eslint-recommended
:
{
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended"
]
}
If you want to use rules which require type information, you will need to specify a path to your tsconfig.json file in the "project" property of "parserOptions".
{
"parser": "@typescript-eslint/parser",
"parserOptions": {
"project": "./tsconfig.json"
},
"plugins": ["@typescript-eslint"],
"rules": {
"@typescript-eslint/restrict-plus-operands": "error"
}
}
See @typescript-eslint/parser's README.md for more information on the available "parserOptions".
Note: Make sure to use eslint --ext .js,.ts
since by default eslint
will only search for .js files.
Usage with Prettier
Install eslint-config-prettier
to disable our code formatting related rules:
{
"extends": [
"plugin:@typescript-eslint/recommended",
"prettier",
"prettier/@typescript-eslint"
]
}
Note: Make sure you have eslint-config-prettier@4.0.0
or newer.
Usage with Airbnb
Airbnb has two configs, a base one eslint-config-airbnb-base
and one that includes rules for React eslint-config-airbnb
.
First you'll need to install the config according to the instructions in one of the links above. npx install-peerdeps --dev eslint-config-airbnb
or npx install-peerdeps --dev eslint-config-airbnb-base
should work if you are using npm 5+.
Then you should add airbnb
(or airbnb-base
) to your extends
section of .eslintrc
. You might also want to turn on plugin:@typescript-eslint/recommended
as well to enable all of the recommended rules.
{
"extends": ["airbnb-base", "plugin:@typescript-eslint/recommended"]
}
Note: You can use Airbnb's rules alongside Prettier, see Usage with Prettier
Supported Rules
Key: :heavy_check_mark: = recommended, :wrench: = fixable, :thought_balloon: = requires type information
Name | Description | :heavy_check_mark: | :wrench: | :thought_balloon: |
---|---|---|---|---|
@typescript-eslint/adjacent-overload-signatures | Require that member overloads be consecutive | :heavy_check_mark: | ||
@typescript-eslint/array-type | Requires using either T[] or Array<T> for arrays | :heavy_check_mark: | :wrench: | |
@typescript-eslint/await-thenable | Disallows awaiting a value that is not a Thenable | :thought_balloon: | ||
@typescript-eslint/ban-ts-ignore | Bans “// @ts-ignore” comments from being used | |||
@typescript-eslint/ban-types | Enforces that types will not to be used | :heavy_check_mark: | :wrench: | |
@typescript-eslint/camelcase | Enforce camelCase naming convention | :heavy_check_mark: | ||
@typescript-eslint/class-name-casing | Require PascalCased class and interface names | :heavy_check_mark: | ||
@typescript-eslint/consistent-type-assertions | Enforces consistent usage of type assertions. | :heavy_check_mark: | ||
@typescript-eslint/consistent-type-definitions | Consistent with type definition either interface or type | :wrench: | ||
@typescript-eslint/explicit-function-return-type | Require explicit return types on functions and class methods | :heavy_check_mark: | ||
@typescript-eslint/explicit-member-accessibility | Require explicit accessibility modifiers on class properties and methods | :heavy_check_mark: | ||
@typescript-eslint/func-call-spacing | Require or disallow spacing between function identifiers and their invocations | :wrench: | ||
@typescript-eslint/generic-type-naming | Enforces naming of generic type variables | |||
@typescript-eslint/indent | Enforce consistent indentation | :heavy_check_mark: | :wrench: | |
@typescript-eslint/interface-name-prefix | Require that interface names be prefixed with I | :heavy_check_mark: | ||
@typescript-eslint/member-delimiter-style | Require a specific member delimiter style for interfaces and type literals | :heavy_check_mark: | :wrench: | |
@typescript-eslint/member-naming | Enforces naming conventions for class members by visibility | |||
@typescript-eslint/member-ordering | Require a consistent member declaration order | |||
@typescript-eslint/no-array-constructor | Disallow generic Array constructors | :heavy_check_mark: | :wrench: | |
@typescript-eslint/no-empty-function | Disallow empty functions | |||
@typescript-eslint/no-empty-interface | Disallow the declaration of empty interfaces | :heavy_check_mark: | ||
@typescript-eslint/no-explicit-any | Disallow usage of the any type | :heavy_check_mark: | :wrench: | |
@typescript-eslint/no-extra-parens | Disallow unnecessary parentheses | :wrench: | ||
@typescript-eslint/no-extraneous-class | Forbids the use of classes as namespaces | |||
@typescript-eslint/no-floating-promises | Requires Promise-like values to be handled appropriately. | :thought_balloon: | ||
@typescript-eslint/no-for-in-array | Disallow iterating over an array with a for-in loop | :thought_balloon: | ||
@typescript-eslint/no-inferrable-types | Disallows explicit type declarations for variables or parameters initialized to a number, string, or boolean | :heavy_check_mark: | :wrench: | |
@typescript-eslint/no-magic-numbers | Disallows magic numbers | |||
@typescript-eslint/no-misused-new | Enforce valid definition of new and constructor | :heavy_check_mark: | ||
@typescript-eslint/no-misused-promises | Avoid using promises in places not designed to handle them | :thought_balloon: | ||
@typescript-eslint/no-namespace | Disallow the use of custom TypeScript modules and namespaces | :heavy_check_mark: | ||
@typescript-eslint/no-non-null-assertion | Disallows non-null assertions using the ! postfix operator | :heavy_check_mark: | ||
@typescript-eslint/no-parameter-properties | Disallow the use of parameter properties in class constructors | :heavy_check_mark: | ||
@typescript-eslint/no-require-imports | Disallows invocation of require() | |||
@typescript-eslint/no-this-alias | Disallow aliasing this | |||
@typescript-eslint/no-type-alias | Disallow the use of type aliases | |||
@typescript-eslint/no-unnecessary-qualifier | Warns when a namespace qualifier is unnecessary | :wrench: | :thought_balloon: | |
@typescript-eslint/no-unnecessary-type-arguments | Warns if an explicitly specified type argument is the default for that type parameter | :wrench: | :thought_balloon: | |
@typescript-eslint/no-unnecessary-type-assertion | Warns if a type assertion does not change the type of an expression | :wrench: | :thought_balloon: | |
@typescript-eslint/no-unused-vars | Disallow unused variables | :heavy_check_mark: | ||
@typescript-eslint/no-use-before-define | Disallow the use of variables before they are defined | :heavy_check_mark: | ||
@typescript-eslint/no-useless-constructor | Disallow unnecessary constructors | |||
@typescript-eslint/no-var-requires | Disallows the use of require statements except in import statements | :heavy_check_mark: | ||
@typescript-eslint/prefer-for-of | Prefer a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access the array being iterated | |||
@typescript-eslint/prefer-function-type | Use function types instead of interfaces with call signatures | :wrench: | ||
@typescript-eslint/prefer-includes | Enforce includes method over indexOf method | :wrench: | :thought_balloon: | |
@typescript-eslint/prefer-namespace-keyword | Require the use of the namespace keyword instead of the module keyword to declare custom TypeScript modules | :heavy_check_mark: | :wrench: | |
@typescript-eslint/prefer-readonly | Requires that private members are marked as readonly if they're never modified outside of the constructor | :wrench: | :thought_balloon: | |
@typescript-eslint/prefer-regexp-exec | Prefer RegExp#exec() over String#match() if no global flag is provided | :thought_balloon: | ||
@typescript-eslint/prefer-string-starts-ends-with | Enforce the use of String#startsWith and String#endsWith instead of other equivalent methods of checking substrings | :wrench: | :thought_balloon: | |
@typescript-eslint/promise-function-async | Requires any function or method that returns a Promise to be marked async | :thought_balloon: | ||
@typescript-eslint/require-array-sort-compare | Enforce giving compare argument to Array#sort | :thought_balloon: | ||
@typescript-eslint/require-await | Disallow async functions which have no await expression | :thought_balloon: | ||
@typescript-eslint/restrict-plus-operands | When adding two variables, operands must both be of type number or of type string | :thought_balloon: | ||
@typescript-eslint/semi | Require or disallow semicolons instead of ASI | :wrench: | ||
@typescript-eslint/strict-boolean-expressions | Restricts the types allowed in boolean expressions | :thought_balloon: | ||
@typescript-eslint/triple-slash-reference | Sets preference level for triple slash directives versus ES6-style import declarations | |||
@typescript-eslint/type-annotation-spacing | Require consistent spacing around type annotations | :heavy_check_mark: | :wrench: | |
@typescript-eslint/typedef | Requires type annotations to exist | |||
@typescript-eslint/unbound-method | Enforces unbound methods are called with their expected scope | :thought_balloon: | ||
@typescript-eslint/unified-signatures | Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter |