Overview
@typescript-eslint/eslint-plugin
includes over 100 rules that detect best practice violations, bugs, and/or stylistic issues specifically for TypeScript code.
See Configs for how to enable recommended rules using configs.
Supported Rulesβ
Key: β = recommended, π = strict, π§ = fixable, π = requires type information
Name | Description | β π | π§ | π |
---|---|---|---|---|
@typescript-eslint/adjacent-overload-signatures | Require that member overloads be consecutive | β | ||
@typescript-eslint/array-type | Requires using either T[] or Array<T> for arrays | π | π§ | |
@typescript-eslint/await-thenable | Disallows awaiting a value that is not a Thenable | β | π | |
@typescript-eslint/ban-ts-comment | Bans @ts-<directive> comments from being used or requires descriptions after directive | β | ||
@typescript-eslint/ban-tslint-comment | Bans // tslint:<rule-flag> comments from being used | π | π§ | |
@typescript-eslint/ban-types | Bans specific types from being used | β | π§ | |
@typescript-eslint/class-literal-property-style | Ensures that literals on classes are exposed in a consistent style | π | π§ | |
@typescript-eslint/consistent-indexed-object-style | Enforce or disallow the use of the record type | π | π§ | |
@typescript-eslint/consistent-type-assertions | Enforces consistent usage of type assertions | π | ||
@typescript-eslint/consistent-type-definitions | Consistent with type definition either interface or type | π | π§ | |
@typescript-eslint/consistent-type-exports | Enforces consistent usage of type exports | π§ | π | |
@typescript-eslint/consistent-type-imports | Enforces consistent usage of type imports | π§ | ||
@typescript-eslint/explicit-function-return-type | Require explicit return types on functions and class methods | |||
@typescript-eslint/explicit-member-accessibility | Require explicit accessibility modifiers on class properties and methods | π§ | ||
@typescript-eslint/explicit-module-boundary-types | Require explicit return and argument types on exported functions' and classes' public class methods | |||
@typescript-eslint/member-delimiter-style | Require a specific member delimiter style for interfaces and type literals | π§ | ||
@typescript-eslint/member-ordering | Require a consistent member declaration order | |||
@typescript-eslint/method-signature-style | Enforces using a particular method signature syntax | π§ | ||
@typescript-eslint/naming-convention | Enforces naming conventions for everything across a codebase | π | ||
@typescript-eslint/no-base-to-string | Requires that .toString() is only called on objects which provide useful information when stringified | π | π | |
@typescript-eslint/no-confusing-non-null-assertion | Disallow non-null assertion in locations that may be confusing | π | π§ | |
@typescript-eslint/no-confusing-void-expression | Requires expressions of type void to appear in statement position | π§ | π | |
@typescript-eslint/no-duplicate-enum-values | Disallow duplicate enum member values | π | ||
@typescript-eslint/no-dynamic-delete | Disallow the delete operator with computed key expressions | π | π§ | |
@typescript-eslint/no-empty-interface | Disallow the declaration of empty interfaces | β | π§ | |
@typescript-eslint/no-explicit-any | Disallow usage of the any type | β | π§ | |
@typescript-eslint/no-extra-non-null-assertion | Disallow extra non-null assertion | β | π§ | |
@typescript-eslint/no-extraneous-class | Forbids the use of classes as namespaces | π | ||
@typescript-eslint/no-floating-promises | Requires Promise-like statements to be handled appropriately | β | π | |
@typescript-eslint/no-for-in-array | Disallow iterating over an array with a for-in loop | β | π | |
@typescript-eslint/no-inferrable-types | Disallows explicit type declarations for variables or parameters initialized to a number, string, or boolean | β | π§ | |
@typescript-eslint/no-invalid-void-type | Disallows usage of void type outside of generic or return types | π | ||
@typescript-eslint/no-meaningless-void-operator | Disallow the void operator except when used to discard a value | π | π§ | π |
@typescript-eslint/no-misused-new | Enforce valid definition of new and constructor | β | ||
@typescript-eslint/no-misused-promises | Avoid using Promises in places not designed to handle them | β | π | |
@typescript-eslint/no-namespace | Disallow the use of custom TypeScript modules and namespaces | β | ||
@typescript-eslint/no-non-null-asserted-nullish-coalescing | Disallows using a non-null assertion in the left operand of the nullish coalescing operator | π | ||
@typescript-eslint/no-non-null-asserted-optional-chain | Disallows using a non-null assertion after an optional chain expression | β | ||
@typescript-eslint/no-non-null-assertion | Disallows non-null assertions using the ! postfix operator | β | ||
@typescript-eslint/no-parameter-properties | Disallow the use of parameter properties in class constructors | |||
@typescript-eslint/no-redundant-type-constituents | Disallow members of unions and intersections that do nothing or override type information | π | ||
@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-boolean-literal-compare | Flags unnecessary equality comparisons against boolean literals | π | π§ | π |
@typescript-eslint/no-unnecessary-condition | Prevents conditionals where the type is always truthy or always falsy | π | π§ | π |
@typescript-eslint/no-unnecessary-qualifier | Warns when a namespace qualifier is unnecessary | π§ | π | |
@typescript-eslint/no-unnecessary-type-arguments | Enforces that type arguments will not be used if not required | π | π§ | π |
@typescript-eslint/no-unnecessary-type-assertion | Warns if a type assertion does not change the type of an expression | β | π§ | π |
@typescript-eslint/no-unnecessary-type-constraint | Disallows unnecessary constraints on generic types | β | ||
@typescript-eslint/no-unsafe-argument | Disallows calling a function with an any type value | β | π | |
@typescript-eslint/no-unsafe-assignment | Disallows assigning any to variables and properties | β | π | |
@typescript-eslint/no-unsafe-call | Disallows calling an any type value | β | π | |
@typescript-eslint/no-unsafe-member-access | Disallows member access on any typed variables | β | π | |
@typescript-eslint/no-unsafe-return | Disallows returning any from a function | β | π | |
@typescript-eslint/no-useless-empty-export | Disallow empty exports that don't change anything in a module file | π§ | ||
@typescript-eslint/no-var-requires | Disallows the use of require statements except in import statements | β | ||
@typescript-eslint/non-nullable-type-assertion-style | Prefers a non-null assertion over explicit type cast when possible | π | π§ | π |
@typescript-eslint/parameter-properties | Require or disallow the use of parameter properties in class constructors | |||
@typescript-eslint/prefer-as-const | Prefer usage of as const over literal type | β | π§ | |
@typescript-eslint/prefer-enum-initializers | Prefer initializing each enums member value | |||
@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 | π | π§ | |
@typescript-eslint/prefer-includes | Enforce includes method over indexOf method | π | π§ | π |
@typescript-eslint/prefer-literal-enum-member | Require that all enum members be literal values to prevent unintended enum member name shadow issues | π | ||
@typescript-eslint/prefer-namespace-keyword | Require the use of the namespace keyword instead of the module keyword to declare custom TypeScript modules | β | π§ | |
@typescript-eslint/prefer-nullish-coalescing | Enforce the usage of the nullish coalescing operator instead of logical chaining | π | π | |
@typescript-eslint/prefer-optional-chain | Prefer using concise optional chain expressions instead of chained logical ands | π | ||
@typescript-eslint/prefer-readonly | Requires that private members are marked as readonly if they're never modified outside of the constructor | π§ | π | |
@typescript-eslint/prefer-readonly-parameter-types | Requires that function parameters are typed as readonly to prevent accidental mutation of inputs | π | ||
@typescript-eslint/prefer-reduce-type-parameter | Prefer using type parameter when calling Array#reduce instead of casting | π | π§ | π |
@typescript-eslint/prefer-regexp-exec | Enforce that RegExp#exec is used instead of String#match if no global flag is provided | π§ | π | |
@typescript-eslint/prefer-return-this-type | Enforce that this is used when only this type is returned | π | π§ | π |
@typescript-eslint/prefer-string-starts-ends-with | Enforce the use of String#startsWith and String#endsWith instead of other equivalent methods of checking substrings | π | π§ | π |
@typescript-eslint/prefer-ts-expect-error | Recommends using @ts-expect-error over @ts-ignore | π | π§ | |
@typescript-eslint/promise-function-async | Requires any function or method that returns a Promise to be marked async | π§ | π | |
@typescript-eslint/require-array-sort-compare | Requires Array#sort calls to always provide a compareFunction | π | ||
@typescript-eslint/restrict-plus-operands | When adding two variables, operands must both be of type number or of type string | β | π | |
@typescript-eslint/restrict-template-expressions | Enforce template literal expressions to be of string type | β | π | |
@typescript-eslint/sort-type-union-intersection-members | Enforces that members of a type union/intersection are sorted alphabetically | π§ | ||
@typescript-eslint/strict-boolean-expressions | Restricts the types allowed in boolean expressions | π§ | π | |
@typescript-eslint/switch-exhaustiveness-check | Exhaustiveness checking in switch with union type | π | ||
@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 | π§ | ||
@typescript-eslint/typedef | Requires type annotations to exist | |||
@typescript-eslint/unbound-method | Enforces unbound methods are called with their expected scope | β | π | |
@typescript-eslint/unified-signatures | Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter | π |
Extension Rulesβ
In some cases, ESLint provides a rule itself, but it doesn't support TypeScript syntax; either it crashes, or it ignores the syntax, or it falsely reports against it. In these cases, we create what we call an extension rule; a rule within our plugin that has the same functionality, but also supports TypeScript.
Key: β = recommended, π = strict, π§ = fixable, π = requires type information
Name | Description | β π | π§ | π |
---|---|---|---|---|
@typescript-eslint/brace-style | Enforce consistent brace style for blocks | π§ | ||
@typescript-eslint/comma-dangle | Require or disallow trailing comma | π§ | ||
@typescript-eslint/comma-spacing | Enforces consistent spacing before and after commas | π§ | ||
@typescript-eslint/default-param-last | Enforce default parameters to be last | |||
@typescript-eslint/dot-notation | enforce dot notation whenever possible | π | π§ | π |
@typescript-eslint/func-call-spacing | Require or disallow spacing between function identifiers and their invocations | π§ | ||
@typescript-eslint/indent | Enforce consistent indentation | π§ | ||
@typescript-eslint/init-declarations | require or disallow initialization in variable declarations | |||
@typescript-eslint/keyword-spacing | Enforce consistent spacing before and after keywords | π§ | ||
@typescript-eslint/lines-between-class-members | Require or disallow an empty line between class members | π§ | ||
@typescript-eslint/no-array-constructor | Disallow generic Array constructors | β | π§ | |
@typescript-eslint/no-dupe-class-members | Disallow duplicate class members | |||
@typescript-eslint/no-duplicate-imports | Disallow duplicate imports | |||
@typescript-eslint/no-empty-function | Disallow empty functions | β | ||
@typescript-eslint/no-extra-parens | Disallow unnecessary parentheses | π§ | ||
@typescript-eslint/no-extra-semi | Disallow unnecessary semicolons | β | π§ | |
@typescript-eslint/no-implied-eval | Disallow the use of eval() -like methods | β | π | |
@typescript-eslint/no-invalid-this | Disallow this keywords outside of classes or class-like objects | |||
@typescript-eslint/no-loop-func | Disallow function declarations that contain unsafe references inside loop statements | |||
@typescript-eslint/no-loss-of-precision | Disallow literal numbers that lose precision | β | ||
@typescript-eslint/no-magic-numbers | Disallow magic numbers | |||
@typescript-eslint/no-redeclare | Disallow variable redeclaration | |||
@typescript-eslint/no-restricted-imports | Disallow specified modules when loaded by import | |||
@typescript-eslint/no-shadow | Disallow variable declarations from shadowing variables declared in the outer scope | |||
@typescript-eslint/no-throw-literal | Disallow throwing literals as exceptions | π | π | |
@typescript-eslint/no-unused-expressions | Disallow unused expressions | |||
@typescript-eslint/no-unused-vars | Disallow unused variables | β | ||
@typescript-eslint/no-use-before-define | Disallow the use of variables before they are defined | |||
@typescript-eslint/no-useless-constructor | Disallow unnecessary constructors | π | ||
@typescript-eslint/object-curly-spacing | Enforce consistent spacing inside braces | π§ | ||
@typescript-eslint/padding-line-between-statements | require or disallow padding lines between statements | π§ | ||
@typescript-eslint/quotes | Enforce the consistent use of either backticks, double, or single quotes | π§ | ||
@typescript-eslint/require-await | Disallow async functions which have no await expression | β | π | |
@typescript-eslint/return-await | Enforces consistent returning of awaited values | π§ | π | |
@typescript-eslint/semi | Require or disallow semicolons instead of ASI | π§ | ||
@typescript-eslint/space-before-blocks | Enforces consistent spacing before blocks | π§ | ||
@typescript-eslint/space-before-function-paren | Enforces consistent spacing before function parenthesis | π§ | ||
@typescript-eslint/space-infix-ops | This rule is aimed at ensuring there are spaces around infix operators. | π§ |