Skip to main content

概述


@typescript-eslint/eslint-plugin 包含 100 多个规则,专门针对 TypeScript 代码检测最佳实践违规、错误和/或风格问题。 下面列出了我们的所有规则。

英:@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.

提示

我们建议使用 我们预定义的配置 之一来启用一大组推荐规则,而不是逐条启用规则。

规则

规则按字母顺序列出。 你可以选择根据以下类别过滤它们:

英:The rules are listed in alphabetical order. You can optionally filter them based on these categories:

配置组 (⚙️)
元数据

以下将更详细地 解释这些类别。)

规则
⚙️
🔧
💭
🧱
📐
💀
@typescript-eslint/adjacent-overload-signatures
Require that function overload signatures be consecutive
🎨
@typescript-eslint/array-type
Require consistently using either T[] or Array<T> for arrays
🎨🔧
@typescript-eslint/await-thenable
Disallow awaiting a value that is not a Thenable

💡
💭
@typescript-eslint/ban-ts-comment
Disallow @ts-<directive> comments or require descriptions after directives

💡
@typescript-eslint/ban-tslint-comment
Disallow // tslint:<rule-flag> comments
🎨🔧
@typescript-eslint/ban-types
Disallow certain types
🔧
💡
@typescript-eslint/block-spacing
Disallow or enforce spaces inside of blocks after opening block and before closing block
🔧
🧱📐
@typescript-eslint/brace-style
Enforce consistent brace style for blocks
🔧
🧱📐
@typescript-eslint/class-literal-property-style
Enforce that literals on classes are exposed in a consistent style
🎨
💡
@typescript-eslint/class-methods-use-this
Enforce that class methods utilize this
🔧
🧱
@typescript-eslint/comma-dangle
Require or disallow trailing commas
🔧
🧱📐
@typescript-eslint/comma-spacing
Enforce consistent spacing before and after commas
🔧
🧱📐
@typescript-eslint/consistent-generic-constructors
Enforce specifying generic type arguments on type annotation or constructor name of a constructor call
🎨🔧
@typescript-eslint/consistent-indexed-object-style
Require or disallow the Record type
🎨🔧
@typescript-eslint/consistent-type-assertions
Enforce consistent usage of type assertions
🎨🔧
💡
@typescript-eslint/consistent-type-definitions
Enforce type definitions to consistently use either interface or type
🎨🔧
@typescript-eslint/consistent-type-exports
Enforce consistent usage of type exports
🔧
💭
@typescript-eslint/consistent-type-imports
Enforce consistent usage of type imports
🔧
@typescript-eslint/default-param-last
Enforce default parameters to be last

🧱
@typescript-eslint/dot-notation
Enforce dot notation whenever possible
🎨🔧
💭🧱
@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/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/key-spacing
Enforce consistent spacing between property names and type annotations in types and interfaces
🔧
🧱📐
@typescript-eslint/keyword-spacing
Enforce consistent spacing before and after keywords
🔧
🧱📐
@typescript-eslint/lines-around-comment
Require empty lines around comments
🔧
🧱📐
@typescript-eslint/lines-between-class-members
Require or disallow an empty line between class members
🔧
🧱📐
@typescript-eslint/max-params
Enforce a maximum number of parameters in function definitions

🧱
@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
Enforce using a particular method signature syntax
🔧
@typescript-eslint/naming-convention
Enforce naming conventions for everything across a codebase

💭
@typescript-eslint/no-array-constructor
Disallow generic Array constructors
🔧
🧱
@typescript-eslint/no-base-to-string
Require .toString() to only be 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
Require expressions of type void to appear in statement position
🔒🔧
💡
💭
@typescript-eslint/no-dupe-class-members
Disallow duplicate class members

🧱
@typescript-eslint/no-duplicate-enum-values
Disallow duplicate enum member values

@typescript-eslint/no-duplicate-type-constituents
Disallow duplicate constituents of union or intersection types
🔧
💭
@typescript-eslint/no-dynamic-delete
Disallow using the delete operator on computed key expressions
🔒🔧
@typescript-eslint/no-empty-function
Disallow empty functions
🎨
🧱
@typescript-eslint/no-empty-interface
Disallow the declaration of empty interfaces
🎨🔧
💡
@typescript-eslint/no-explicit-any
Disallow the any type
🔧
💡
@typescript-eslint/no-extra-non-null-assertion
Disallow extra non-null assertions
🔧
@typescript-eslint/no-extra-parens
Disallow unnecessary parentheses
🔧
🧱📐
@typescript-eslint/no-extra-semi
Disallow unnecessary semicolons
🔧
🧱
@typescript-eslint/no-extraneous-class
Disallow classes used as namespaces
🔒
@typescript-eslint/no-floating-promises
Require 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-implied-eval
Disallow the use of eval()-like methods

💭🧱
@typescript-eslint/no-import-type-side-effects
Enforce the use of top-level import type qualifier when an import only has specifiers with inline type qualifiers
🔧
@typescript-eslint/no-inferrable-types
Disallow explicit type declarations for variables or parameters initialized to a number, string, or boolean
🎨🔧
@typescript-eslint/no-invalid-this
Disallow this keywords outside of classes or class-like objects

🧱
@typescript-eslint/no-invalid-void-type
Disallow void type outside of generic or return types
🔒
@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-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
Disallow Promises in places not designed to handle them

💭
@typescript-eslint/no-mixed-enums
Disallow enums from having both number and string members
🔒
💭
@typescript-eslint/no-namespace
Disallow TypeScript namespaces

@typescript-eslint/no-non-null-asserted-nullish-coalescing
Disallow non-null assertions in the left operand of a nullish coalescing operator
🔒
💡
@typescript-eslint/no-non-null-asserted-optional-chain
Disallow non-null assertions after an optional chain expression

💡
@typescript-eslint/no-non-null-assertion
Disallow non-null assertions using the ! postfix operator
🔒
💡
@typescript-eslint/no-redeclare
Disallow variable redeclaration

🧱
@typescript-eslint/no-redundant-type-constituents
Disallow members of unions and intersections that do nothing or override type information

💭
@typescript-eslint/no-require-imports
Disallow invocation of require()

@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-this-alias
Disallow aliasing this

@typescript-eslint/no-throw-literal
Disallow throwing literals as exceptions
🔒
💭🧱
@typescript-eslint/no-type-alias
Disallow type aliases

💀
@typescript-eslint/no-unnecessary-boolean-literal-compare
Disallow unnecessary equality comparisons against boolean literals
🔒🔧
💭
@typescript-eslint/no-unnecessary-condition
Disallow conditionals where the type is always truthy or always falsy
🔒🔧
💭
@typescript-eslint/no-unnecessary-qualifier
Disallow unnecessary namespace qualifiers
🔧
💭
@typescript-eslint/no-unnecessary-type-arguments
Disallow type arguments that are equal to the default
🔒🔧
💭
@typescript-eslint/no-unnecessary-type-assertion
Disallow type assertions that do not change the type of an expression
🔧
💭
@typescript-eslint/no-unnecessary-type-constraint
Disallow unnecessary constraints on generic types

💡
@typescript-eslint/no-unsafe-argument
Disallow calling a function with a value with type any

💭
@typescript-eslint/no-unsafe-assignment
Disallow assigning a value with type any to variables and properties

💭
@typescript-eslint/no-unsafe-call
Disallow calling a value with type any

💭
@typescript-eslint/no-unsafe-declaration-merging
Disallow unsafe declaration merging

@typescript-eslint/no-unsafe-enum-comparison
Disallow comparing an enum value with a non-enum value

💡
💭
@typescript-eslint/no-unsafe-member-access
Disallow member access on a value with type any

💭
@typescript-eslint/no-unsafe-return
Disallow returning a value with type any from a function

💭
@typescript-eslint/no-unsafe-unary-minus
Require unary negation to take a number

💭
@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/no-useless-empty-export
Disallow empty exports that don't change anything in a module file
🔧
@typescript-eslint/no-var-requires
Disallow require statements except in import statements

@typescript-eslint/non-nullable-type-assertion-style
Enforce non-null assertions over explicit type casts
🎨🔧
💭
@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/parameter-properties
Require or disallow parameter properties in class constructors

@typescript-eslint/prefer-as-const
Enforce the use of as const over literal type
🔧
💡
@typescript-eslint/prefer-destructuring
Require destructuring from arrays and/or objects
🔧
💭🧱
@typescript-eslint/prefer-enum-initializers
Require each enum member value to be explicitly initialized

💡
@typescript-eslint/prefer-for-of
Enforce the use of for-of loop over the standard for loop where possible
🎨
@typescript-eslint/prefer-function-type
Enforce using 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 all enum members to be literal values
🔒
@typescript-eslint/prefer-namespace-keyword
Require using namespace keyword over module keyword to declare custom TypeScript modules
🎨🔧
@typescript-eslint/prefer-nullish-coalescing
Enforce using the nullish coalescing operator instead of logical assignments or chaining
🎨
💡
💭
@typescript-eslint/prefer-optional-chain
Enforce using concise optional chain expressions instead of chained logical ands, negated logical ors, or empty objects
🎨🔧
💡
💭
@typescript-eslint/prefer-readonly
Require private members to be marked as readonly if they're never modified outside of the constructor
🔧
💭
@typescript-eslint/prefer-readonly-parameter-types
Require function parameters to be typed as readonly to prevent accidental mutation of inputs

💭
@typescript-eslint/prefer-reduce-type-parameter
Enforce using type parameter when calling Array#reduce instead of casting
🔒🔧
💭
@typescript-eslint/prefer-regexp-exec
Enforce RegExp#exec over 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 using String#startsWith and String#endsWith over other equivalent methods of checking substrings
🎨🔧
💭
@typescript-eslint/prefer-ts-expect-error
Enforce using @ts-expect-error over @ts-ignore
🔒🔧
@typescript-eslint/promise-function-async
Require any function or method that returns a Promise to be marked async
🔧
💭
@typescript-eslint/quotes
Enforce the consistent use of either backticks, double, or single quotes
🔧
🧱📐
@typescript-eslint/require-array-sort-compare
Require Array#sort calls to always provide a compareFunction

💭
@typescript-eslint/require-await
Disallow async functions which have no await expression

💭🧱
@typescript-eslint/restrict-plus-operands
Require both operands of addition to be the same type and be bigint, number, or string

💭
@typescript-eslint/restrict-template-expressions
Enforce template literal expressions to be of string type

💭
@typescript-eslint/return-await
Enforce consistent returning of awaited values
🔧
💡
💭🧱
@typescript-eslint/semi
Require or disallow semicolons instead of ASI
🔧
🧱📐
@typescript-eslint/sort-type-constituents
Enforce constituents of a type union/intersection to be sorted alphabetically
🔧
💡
@typescript-eslint/space-before-blocks
Enforce consistent spacing before blocks
🔧
🧱📐
@typescript-eslint/space-before-function-paren
Enforce consistent spacing before function parenthesis
🔧
🧱📐
@typescript-eslint/space-infix-ops
Require spacing around infix operators
🔧
🧱📐
@typescript-eslint/strict-boolean-expressions
Disallow certain types in boolean expressions
🔧
💡
💭
@typescript-eslint/switch-exhaustiveness-check
Require switch-case statements to be exhaustive with union type

💡
💭
@typescript-eslint/triple-slash-reference
Disallow certain triple slash directives in favor of ES6-style import declarations

@typescript-eslint/type-annotation-spacing
Require consistent spacing around type annotations
🔧
📐
@typescript-eslint/typedef
Require type annotations in certain places

@typescript-eslint/unbound-method
Enforce unbound methods are called with their expected scope

💭
@typescript-eslint/unified-signatures
Disallow two overloads that could be unified into one with a union or an optional/rest parameter
🔒

过滤

配置组 (⚙️)

"配置组" 指的是包含该规则的 预定义配置。 从配置预设扩展允许同时启用大量推荐规则。

英:"Config Group" refers to the pre-defined config that includes the rule. Extending from a configuration preset allow for enabling a large set of recommended rules all at once.

元数据

  • 🔧 fixable 指的是规则是否包含 ESLint --fix 自动修复程序
  • 💡 has suggestions 指的是规则是否包含 ESLint 建议修复程序。
    • 有时,使用自动修复程序自动修复代码并不安全。 但在这些情况下,我们通常可以很好地猜测正确的修复应该是什么,并且我们可以将其作为建议提供给开发者。
  • 💭 requires type information 是指规则是否需要 类型化的 linting
  • 🧱 extension rule 表示该规则是 核心 ESLint 规则 的扩展(请参阅 扩展规则)。
  • 📐 formatting rule 表示该规则与格式有关。
  • 💀 deprecated rule 表示该规则不应再使用,并将在未来版本中从插件中删除。

扩展规则

一些核心 ESLint 规则不支持 TypeScript 语法: 它们要么崩溃,要么忽略语法,要么错误地报告语法。 在这些情况下,我们创建所谓的 "扩展规则": 我们的插件中的规则具有相同的功能,但也支持 TypeScript。

英:Some core ESLint rules do not support TypeScript syntax: either they crash, ignore the syntax, or falsely report 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.

扩展规则通常完全取代 ESLint 核心的基本规则。 如果在你扩展的配置中启用了基本规则,你需要禁用基本规则:

英:Extension rules generally completely replace the base rule from ESLint core. If the base rule is enabled in a config you extend from, you'll need to disable the base rule:

module.exports = {
extends: ['eslint:recommended'],
rules: {
// Note: you must disable the base rule as it can report incorrect errors
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': 'error',
},
};

搜索 🧱 extension rule 在这个页面可以看到所有的扩展规则。

英:Search for 🧱 extension rules in this page to see all extension rules.