Socket
Book a DemoInstallSign in
Socket

@typescript-eslint/eslint-plugin

Package Overview
Dependencies
Maintainers
1
Versions
4327
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@typescript-eslint/eslint-plugin

TypeScript plugin for ESLint

Source
npmnpm
Version
5.29.0
Version published
Weekly downloads
53M
-9.07%
Maintainers
1
Weekly downloads
 
Created
Source

ESLint Plugin TypeScript

An ESLint plugin which provides lint rules for TypeScript codebases.

CI NPM Version NPM Downloads

Getting Started

These docs walk you through setting up ESLint, this plugin, and our parser. If you know what you're doing and just want to quick start, read on...

Quick-start

Installation

Make sure you have TypeScript and @typescript-eslint/parser installed:

$ yarn add -D typescript @typescript-eslint/parser
$ npm i --save-dev typescript @typescript-eslint/parser

Then install the plugin:

$ yarn add -D @typescript-eslint/eslint-plugin
$ npm i --save-dev @typescript-eslint/eslint-plugin

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, 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 (the set of rules which are recommended for all projects by the ESLint Team) with this plugin:

{
  "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"]
}

As of version 2 of this plugin, by design, none of the rules in the main recommended config require type-checking in order to run. This means that they are more lightweight and faster to run.

Some highly valuable rules require type-checking in order to be implemented correctly, however, so we provide an additional config you can extend from called recommended-requiring-type-checking. You would apply this in addition to the recommended configs previously mentioned, e.g.:

{
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
  ]
}

Pro Tip: For larger codebases you may want to consider splitting our linting into two separate stages: 1. fast feedback rules which operate purely based on syntax (no type-checking), 2. rules which are based on semantics (type-checking).

You can read more about linting with type information here

Supported Rules

Key: :white_check_mark: = recommended, :lock: = strict, :wrench: = fixable, :thought_balloon: = requires type information

NameDescription:white_check_mark::lock::wrench::thought_balloon:
@typescript-eslint/adjacent-overload-signaturesRequire that member overloads be consecutive:white_check_mark:
@typescript-eslint/array-typeRequire using either T[] or Array<T> for arrays:lock::wrench:
@typescript-eslint/await-thenableDisallow awaiting a value that is not a Thenable:white_check_mark::thought_balloon:
@typescript-eslint/ban-ts-commentDisallow @ts-<directive> comments or require descriptions after directive:white_check_mark:
@typescript-eslint/ban-tslint-commentDisallow // tslint:<rule-flag> comments:lock::wrench:
@typescript-eslint/ban-typesDisallow certain types:white_check_mark::wrench:
@typescript-eslint/class-literal-property-styleEnforce that literals on classes are exposed in a consistent style:lock::wrench:
@typescript-eslint/consistent-generic-constructorsEnforce specifying generic type arguments on type annotation or constructor name of a constructor call:lock::wrench:
@typescript-eslint/consistent-indexed-object-styleRequire or disallow the Record type:lock::wrench:
@typescript-eslint/consistent-type-assertionsEnforce consistent usage of type assertions:lock:
@typescript-eslint/consistent-type-definitionsEnforce type definitions to consistently use either interface or type:lock::wrench:
@typescript-eslint/consistent-type-exportsEnforce consistent usage of type exports:wrench::thought_balloon:
@typescript-eslint/consistent-type-importsEnforce consistent usage of type imports:wrench:
@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:wrench:
@typescript-eslint/explicit-module-boundary-typesRequire explicit return and argument types on exported functions' and classes' public class methods
@typescript-eslint/member-delimiter-styleRequire a specific member delimiter style for interfaces and type literals:wrench:
@typescript-eslint/member-orderingRequire a consistent member declaration order
@typescript-eslint/method-signature-styleEnforce using a particular method signature syntax:wrench:
@typescript-eslint/naming-conventionEnforce naming conventions for everything across a codebase:thought_balloon:
@typescript-eslint/no-base-to-stringRequire .toString() to only be called on objects which provide useful information when stringified:lock::thought_balloon:
@typescript-eslint/no-confusing-non-null-assertionDisallow non-null assertion in locations that may be confusing:lock::wrench:
@typescript-eslint/no-confusing-void-expressionRequire expressions of type void to appear in statement position:wrench::thought_balloon:
@typescript-eslint/no-duplicate-enum-valuesDisallow duplicate enum member values:lock:
@typescript-eslint/no-dynamic-deleteDisallow using the delete operator on computed key expressions:lock::wrench:
@typescript-eslint/no-empty-interfaceDisallow the declaration of empty interfaces:white_check_mark::wrench:
@typescript-eslint/no-explicit-anyDisallow the any type:white_check_mark::wrench:
@typescript-eslint/no-extra-non-null-assertionDisallow extra non-null assertion:white_check_mark::wrench:
@typescript-eslint/no-extraneous-classDisallow classes used as namespaces:lock:
@typescript-eslint/no-floating-promisesRequire Promise-like statements to be handled appropriately:white_check_mark::thought_balloon:
@typescript-eslint/no-for-in-arrayDisallow iterating over an array with a for-in loop:white_check_mark::thought_balloon:
@typescript-eslint/no-inferrable-typesDisallow explicit type declarations for variables or parameters initialized to a number, string, or boolean:white_check_mark::wrench:
@typescript-eslint/no-invalid-void-typeDisallow void type outside of generic or return types:lock:
@typescript-eslint/no-meaningless-void-operatorDisallow the void operator except when used to discard a value:lock::wrench::thought_balloon:
@typescript-eslint/no-misused-newEnforce valid definition of new and constructor:white_check_mark:
@typescript-eslint/no-misused-promisesDisallow Promises in places not designed to handle them:white_check_mark::thought_balloon:
@typescript-eslint/no-namespaceDisallow custom TypeScript modules and namespaces:white_check_mark:
@typescript-eslint/no-non-null-asserted-nullish-coalescingDisallow non-null assertions in the left operand of a nullish coalescing operator:lock:
@typescript-eslint/no-non-null-asserted-optional-chainDisallow non-null assertions after an optional chain expression:white_check_mark:
@typescript-eslint/no-non-null-assertionDisallow non-null assertions using the ! postfix operator:white_check_mark:
@typescript-eslint/no-redundant-type-constituentsDisallow members of unions and intersections that do nothing or override type information:thought_balloon:
@typescript-eslint/no-require-importsDisallow invocation of require()
@typescript-eslint/no-this-aliasDisallow aliasing this:white_check_mark:
@typescript-eslint/no-type-aliasDisallow type aliases
@typescript-eslint/no-unnecessary-boolean-literal-compareDisallow unnecessary equality comparisons against boolean literals:lock::wrench::thought_balloon:
@typescript-eslint/no-unnecessary-conditionDisallow conditionals where the type is always truthy or always falsy:lock::wrench::thought_balloon:
@typescript-eslint/no-unnecessary-qualifierDisallow unnecessary namespace qualifiers:wrench::thought_balloon:
@typescript-eslint/no-unnecessary-type-argumentsDisallow type arguments that are equal to the default:lock::wrench::thought_balloon:
@typescript-eslint/no-unnecessary-type-assertionDisallow type assertions that do not change the type of an expression:white_check_mark::wrench::thought_balloon:
@typescript-eslint/no-unnecessary-type-constraintDisallow unnecessary constraints on generic types:white_check_mark:
@typescript-eslint/no-unsafe-argumentDisallow calling a function with a value with type any:white_check_mark::thought_balloon:
@typescript-eslint/no-unsafe-assignmentDisallow assigning a value with type any to variables and properties:white_check_mark::thought_balloon:
@typescript-eslint/no-unsafe-callDisallow calling a value with type any:white_check_mark::thought_balloon:
@typescript-eslint/no-unsafe-member-accessDisallow member access on a value with type any:white_check_mark::thought_balloon:
@typescript-eslint/no-unsafe-returnDisallow returning a value with type any from a function:white_check_mark::thought_balloon:
@typescript-eslint/no-useless-empty-exportDisallow empty exports that don't change anything in a module file:wrench:
@typescript-eslint/no-var-requiresDisallow require statements except in import statements:white_check_mark:
@typescript-eslint/non-nullable-type-assertion-styleEnforce non-null assertions over explicit type casts:lock::wrench::thought_balloon:
@typescript-eslint/parameter-propertiesRequire or disallow parameter properties in class constructors
@typescript-eslint/prefer-as-constEnforce the use of as const over literal type:white_check_mark::wrench:
@typescript-eslint/prefer-enum-initializersRequire each enum member value to be explicitly initialized
@typescript-eslint/prefer-for-ofEnforce the use of for-of loop over the standard for loop where possible:lock:
@typescript-eslint/prefer-function-typeEnforce using function types instead of interfaces with call signatures:lock::wrench:
@typescript-eslint/prefer-includesEnforce includes method over indexOf method:lock::wrench::thought_balloon:
@typescript-eslint/prefer-literal-enum-memberRequire all enum members to be literal values:lock:
@typescript-eslint/prefer-namespace-keywordRequire using namespace keyword over module keyword to declare custom TypeScript modules:white_check_mark::wrench:
@typescript-eslint/prefer-nullish-coalescingEnforce using the nullish coalescing operator instead of logical chaining:lock::thought_balloon:
@typescript-eslint/prefer-optional-chainEnforce using concise optional chain expressions instead of chained logical ands:lock:
@typescript-eslint/prefer-readonlyRequire private members to be marked as readonly if they're never modified outside of the constructor:wrench::thought_balloon:
@typescript-eslint/prefer-readonly-parameter-typesRequire function parameters to be typed as readonly to prevent accidental mutation of inputs:thought_balloon:
@typescript-eslint/prefer-reduce-type-parameterEnforce using type parameter when calling Array#reduce instead of casting:lock::wrench::thought_balloon:
@typescript-eslint/prefer-regexp-execEnforce RegExp#exec over String#match if no global flag is provided:wrench::thought_balloon:
@typescript-eslint/prefer-return-this-typeEnforce that this is used when only this type is returned:lock::wrench::thought_balloon:
@typescript-eslint/prefer-string-starts-ends-withEnforce using String#startsWith and String#endsWith over other equivalent methods of checking substrings:lock::wrench::thought_balloon:
@typescript-eslint/prefer-ts-expect-errorEnforce using @ts-expect-error over @ts-ignore:lock::wrench:
@typescript-eslint/promise-function-asyncRequire any function or method that returns a Promise to be marked async:wrench::thought_balloon:
@typescript-eslint/require-array-sort-compareRequire Array#sort calls to always provide a compareFunction:thought_balloon:
@typescript-eslint/restrict-plus-operandsRequire both operands of addition to have type number or string:white_check_mark::thought_balloon:
@typescript-eslint/restrict-template-expressionsEnforce template literal expressions to be of string type:white_check_mark::thought_balloon:
@typescript-eslint/sort-type-union-intersection-membersEnforce members of a type union/intersection to be sorted alphabetically:wrench:
@typescript-eslint/strict-boolean-expressionsDisallow certain types in boolean expressions:wrench::thought_balloon:
@typescript-eslint/switch-exhaustiveness-checkRequire switch-case statements to be exhaustive with union type:thought_balloon:
@typescript-eslint/triple-slash-referenceDisallow certain triple slash directives in favor of ES6-style import declarations:white_check_mark:
@typescript-eslint/type-annotation-spacingRequire consistent spacing around type annotations:wrench:
@typescript-eslint/typedefRequire type annotations in certain places
@typescript-eslint/unbound-methodEnforce unbound methods are called with their expected scope:white_check_mark::thought_balloon:
@typescript-eslint/unified-signaturesDisallow two overloads that could be unified into one with a union or an optional/rest parameter:lock:

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: :white_check_mark: = recommended, :lock: = strict, :wrench: = fixable, :thought_balloon: = requires type information

NameDescription:white_check_mark::lock::wrench::thought_balloon:
@typescript-eslint/brace-styleEnforce consistent brace style for blocks:wrench:
@typescript-eslint/comma-dangleRequire or disallow trailing commas:wrench:
@typescript-eslint/comma-spacingEnforce consistent spacing before and after commas:wrench:
@typescript-eslint/default-param-lastEnforce default parameters to be last
@typescript-eslint/dot-notationEnforce dot notation whenever possible:lock::wrench::thought_balloon:
@typescript-eslint/func-call-spacingRequire or disallow spacing between function identifiers and their invocations:wrench:
@typescript-eslint/indentEnforce consistent indentation:wrench:
@typescript-eslint/init-declarationsRequire or disallow initialization in variable declarations
@typescript-eslint/keyword-spacingEnforce consistent spacing before and after keywords:wrench:
@typescript-eslint/lines-between-class-membersRequire or disallow an empty line between class members:wrench:
@typescript-eslint/no-array-constructorDisallow generic Array constructors:white_check_mark::wrench:
@typescript-eslint/no-dupe-class-membersDisallow duplicate class members
@typescript-eslint/no-empty-functionDisallow empty functions:white_check_mark:
@typescript-eslint/no-extra-parensDisallow unnecessary parentheses:wrench:
@typescript-eslint/no-extra-semiDisallow unnecessary semicolons:white_check_mark::wrench:
@typescript-eslint/no-implied-evalDisallow the use of eval()-like methods:white_check_mark::thought_balloon:
@typescript-eslint/no-invalid-thisDisallow this keywords outside of classes or class-like objects
@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:white_check_mark:
@typescript-eslint/no-magic-numbersDisallow magic numbers
@typescript-eslint/no-redeclareDisallow variable redeclaration
@typescript-eslint/no-restricted-importsDisallow specified modules when loaded by import
@typescript-eslint/no-shadowDisallow variable declarations from shadowing variables declared in the outer scope
@typescript-eslint/no-throw-literalDisallow throwing literals as exceptions:lock::thought_balloon:
@typescript-eslint/no-unused-expressionsDisallow unused expressions
@typescript-eslint/no-unused-varsDisallow unused variables:white_check_mark:
@typescript-eslint/no-use-before-defineDisallow the use of variables before they are defined
@typescript-eslint/no-useless-constructorDisallow unnecessary constructors:lock:
@typescript-eslint/object-curly-spacingEnforce consistent spacing inside braces:wrench:
@typescript-eslint/padding-line-between-statementsRequire or disallow padding lines between statements:wrench:
@typescript-eslint/quotesEnforce the consistent use of either backticks, double, or single quotes:wrench:
@typescript-eslint/require-awaitDisallow async functions which have no await expression:white_check_mark::thought_balloon:
@typescript-eslint/return-awaitEnforce consistent returning of awaited values:wrench::thought_balloon:
@typescript-eslint/semiRequire or disallow semicolons instead of ASI:wrench:
@typescript-eslint/space-before-blocksEnforce consistent spacing before blocks:wrench:
@typescript-eslint/space-before-function-parenEnforce consistent spacing before function parenthesis:wrench:
@typescript-eslint/space-infix-opsRequire spacing around infix operators:wrench:

Contributing

See the contributing guide here.

Keywords

eslint

FAQs

Package last updated on 20 Jun 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts