Skip to content

Latest commit

 

History

History
160 lines (148 loc) · 36 KB

File metadata and controls

160 lines (148 loc) · 36 KB
title sidebar_label pagination_next pagination_prev slug
Overview
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. 🔧