Overview
@typescript-eslint/eslint-plugin includes over 100 rules that detect best practice violations, bugs, and/or stylistic issues specifically for TypeScript code. All of our rules are listed below.
tip
Instead of enabling rules one by one, we recommend using one of our pre-defined configs to enable a large set of recommended rules.
Rules
The rules are listed in alphabetical order. You can optionally filter them based on these categories:
Config Group (⚙️)
Metadata
(These categories are explained in more detail below.)
| Rule | ⚙️ | 🔧 | 💭 | 🧱 | 💀 |
|---|---|---|---|---|---|
@typescript-eslint/adjacent-overload-signaturesRequire that function overload signatures be consecutive | 🎨 | ||||
@typescript-eslint/array-typeRequire consistently using either T[] or Array<T> for arrays | 🎨 | 🔧 | |||
@typescript-eslint/await-thenableDisallow awaiting a value that is not a Thenable | ✅ | 💡 | 💭 | ||
@typescript-eslint/ban-ts-commentDisallow @ts-<directive> comments or require descriptions after directives | ✅ | 💡 | |||
@typescript-eslint/ban-tslint-commentDisallow // tslint:<rule-flag> comments | 🎨 | 🔧 | |||
@typescript-eslint/class-literal-property-styleEnforce that literals on classes are exposed in a consistent style | 🎨 | 💡 | |||
@typescript-eslint/class-methods-use-thisEnforce that class methods utilize this | 🧱 | ||||
@typescript-eslint/consistent-generic-constructorsEnforce specifying generic type arguments on type annotation or constructor name of a constructor call | 🎨 | 🔧 | |||
@typescript-eslint/consistent-indexed-object-styleRequire or disallow the Record type | 🎨 | 🔧 💡 | |||
@typescript-eslint/consistent-returnRequire return statements to either always or never specify values | 💭 | 🧱 | |||
@typescript-eslint/consistent-type-assertionsEnforce consistent usage of type assertions | 🎨 | 🔧 💡 | |||
@typescript-eslint/consistent-type-definitionsEnforce type definitions to consistently use either interface or type | 🎨 | 🔧 | |||
@typescript-eslint/consistent-type-exportsEnforce consistent usage of type exports | 🔧 | 💭 | |||
@typescript-eslint/consistent-type-importsEnforce consistent usage of type imports | 🔧 | ||||
@typescript-eslint/default-param-lastEnforce default parameters to be last | 🧱 | ||||
@typescript-eslint/dot-notationEnforce dot notation whenever possible | 🎨 | 🔧 | 💭 | 🧱 | |
@typescript-eslint/explicit-function-return-typeRequire explicit return types on functions and class methods | |||||
@typescript-eslint/explicit-member-accessibilityRequire explicit accessibility modifiers on class properties and methods | 🔧 💡 | ||||
@typescript-eslint/explicit-module-boundary-typesRequire explicit return and argument types on exported functions' and classes' public class methods | |||||
@typescript-eslint/init-declarationsRequire or disallow initialization in variable declarations | 🧱 | ||||
@typescript-eslint/max-paramsEnforce a maximum number of parameters in function definitions | 🧱 | ||||
@typescript-eslint/member-orderingRequire a consistent member declaration order | |||||
@typescript-eslint/method-signature-styleEnforce using a particular method signature syntax | 🔧 | ||||
@typescript-eslint/naming-conventionEnforce naming conventions for everything across a codebase | 💭 | ||||
@typescript-eslint/no-array-constructorDisallow generic Array constructors | ✅ | 🔧 | 🧱 | ||
@typescript-eslint/no-array-deleteDisallow using the delete operator on array values | ✅ | 💡 | 💭 | ||
@typescript-eslint/no-base-to-stringRequire .toString() and .toLocaleString() to only be called on objects which provide useful information when stringified | ✅ | 💭 | |||
@typescript-eslint/no-confusing-non-null-assertionDisallow non-null assertion in locations that may be confusing | 🎨 | 💡 | |||
@typescript-eslint/no-confusing-void-expressionRequire expressions of type void to appear in statement position | 🔒 | 🔧 💡 | 💭 | ||
@typescript-eslint/no-deprecatedDisallow using code marked as @deprecated | 🔒 | 💭 | |||
@typescript-eslint/no-dupe-class-membersDisallow duplicate class members | 🧱 | ||||
@typescript-eslint/no-duplicate-enum-valuesDisallow duplicate enum member values | ✅ | ||||
@typescript-eslint/no-duplicate-type-constituentsDisallow duplicate constituents of union or intersection types | ✅ | 🔧 | 💭 | ||
@typescript-eslint/no-dynamic-deleteDisallow using the delete operator on computed key expressions | 🔒 | 🔧 | |||
@typescript-eslint/no-empty-functionDisallow empty functions | 🎨 | 🧱 | |||
@typescript-eslint/no-empty-interfaceDisallow the declaration of empty interfaces | 🔧 💡 | 💀 | |||
@typescript-eslint/no-empty-object-typeDisallow accidentally using the "empty object" type | ✅ | 💡 | |||
@typescript-eslint/no-explicit-anyDisallow the any type | ✅ | 🔧 💡 | |||
@typescript-eslint/no-extra-non-null-assertionDisallow extra non-null assertions | ✅ | 🔧 | |||
@typescript-eslint/no-extraneous-classDisallow classes used as namespaces | 🔒 | ||||
@typescript-eslint/no-floating-promisesRequire Promise-like statements to be handled appropriately | ✅ | 💡 | 💭 | ||
@typescript-eslint/no-for-in-arrayDisallow iterating over an array with a for-in loop | ✅ | 💭 | |||
@typescript-eslint/no-implied-evalDisallow the use of eval()-like methods | ✅ | 💭 | 🧱 | ||
@typescript-eslint/no-import-type-side-effectsEnforce the use of top-level import type qualifier when an import only has specifiers with inline type qualifiers | 🔧 | ||||
@typescript-eslint/no-inferrable-typesDisallow explicit type declarations for variables or parameters initialized to a number, string, or boolean | 🎨 | 🔧 | |||
@typescript-eslint/no-invalid-thisDisallow this keywords outside of classes or class-like objects | 🧱 | ||||
@typescript-eslint/no-invalid-void-typeDisallow void type outside of generic or return types | 🔒 | ||||
@typescript-eslint/no-loop-funcDisallow function declarations that contain unsafe references inside loop statements | 🧱 | ||||
@typescript-eslint/no-loss-of-precisionDisallow literal numbers that lose precision | 🧱 | 💀 | |||
@typescript-eslint/no-magic-numbersDisallow magic numbers | 🧱 | ||||
@typescript-eslint/no-meaningless-void-operatorDisallow the void operator except when used to discard a value | 🔒 | 🔧 💡 | 💭 | ||
@typescript-eslint/no-misused-newEnforce valid definition of new and constructor | ✅ | ||||
@typescript-eslint/no-misused-promisesDisallow Promises in places not designed to handle them | ✅ | 💭 | |||
@typescript-eslint/no-misused-spreadDisallow using the spread operator when it might cause unexpected behavior | 🔒 | 💭 | |||
@typescript-eslint/no-mixed-enumsDisallow enums from having both number and string members | 🔒 | 💭 | |||
@typescript-eslint/no-namespaceDisallow TypeScript namespaces | ✅ | ||||
@typescript-eslint/no-non-null-asserted-nullish-coalescingDisallow non-null assertions in the left operand of a nullish coalescing operator | 🔒 | 💡 | |||
@typescript-eslint/no-non-null-asserted-optional-chainDisallow non-null assertions after an optional chain expression | ✅ | 💡 | |||
@typescript-eslint/no-non-null-assertionDisallow non-null assertions using the ! postfix operator | 🔒 | 💡 | |||
@typescript-eslint/no-redeclareDisallow variable redeclaration | 🧱 | ||||
@typescript-eslint/no-redundant-type-constituentsDisallow members of unions and intersections that do nothing or override type information | ✅ | 💭 | |||
@typescript-eslint/no-require-importsDisallow invocation of require() | ✅ | ||||
@typescript-eslint/no-restricted-importsDisallow specified modules when loaded by import | 🧱 | ||||
@typescript-eslint/no-restricted-typesDisallow certain types | 🔧 💡 | ||||
@typescript-eslint/no-shadowDisallow variable declarations from shadowing variables declared in the outer scope | 🧱 | ||||
@typescript-eslint/no-this-aliasDisallow aliasing this | ✅ | ||||
@typescript-eslint/no-type-aliasDisallow type aliases | 💀 | ||||
@typescript-eslint/no-unnecessary-boolean-literal-compareDisallow unnecessary equality comparisons against boolean literals | 🔒 | 🔧 | 💭 | ||
@typescript-eslint/no-unnecessary-conditionDisallow conditionals where the type is always truthy or always falsy | 🔒 | 🔧 | 💭 | ||
@typescript-eslint/no-unnecessary-parameter-property-assignmentDisallow unnecessary assignment of constructor property parameter | |||||
@typescript-eslint/no-unnecessary-qualifierDisallow unnecessary namespace qualifiers | 🔧 | 💭 | |||
@typescript-eslint/no-unnecessary-template-expressionDisallow unnecessary template expressions | 🔒 | 🔧 | 💭 | ||
@typescript-eslint/no-unnecessary-type-argumentsDisallow type arguments that are equal to the default | 🔒 | 🔧 | 💭 | ||
@typescript-eslint/no-unnecessary-type-assertionDisallow type assertions that do not change the type of an expression | ✅ | 🔧 | 💭 | ||
@typescript-eslint/no-unnecessary-type-constraintDisallow unnecessary constraints on generic types | ✅ | 💡 | |||
@typescript-eslint/no-unnecessary-type-parametersDisallow type parameters that aren't used multiple times | 🔒 | 💡 |