跳至主要内容

概述

@typescript-eslint/eslint-plugin 包含超过 100 条规则,用于检测针对 TypeScript 代码的最佳实践违规、错误和/或样式问题。所有规则都列在下面。

提示

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

规则

规则按字母顺序排列。您可以根据以下类别选择性地筛选它们

配置组 (⚙️)
元数据

(这些类别在 下面详细解释。)

规则
⚙️
🔧
💭
🧱
📐
💀
@typescript-eslint/adjacent-overload-signatures
要求函数重载签名连续
🎨
@typescript-eslint/array-type
要求一致地使用 T[]Array<T> 来表示数组
🎨🔧
@typescript-eslint/await-thenable
禁止等待非 Thenable 的值
💡💭
@typescript-eslint/ban-ts-comment
禁止 @ts-<directive> 注释或要求在指令后添加描述
💡
@typescript-eslint/ban-tslint-comment
禁止 // tslint:<rule-flag> 注释
🎨🔧
@typescript-eslint/ban-types
禁止某些类型
🔧
💡
@typescript-eslint/block-spacing
禁止或强制在块的开头和结尾的括号内使用空格
🔧🧱📐💀
@typescript-eslint/brace-style
强制对块使用一致的括号样式
🔧🧱📐💀
@typescript-eslint/class-literal-property-style
强制类上的字面量以一致的样式公开
🎨💡
@typescript-eslint/class-methods-use-this
强制类方法使用 this
🧱
@typescript-eslint/comma-dangle
要求或禁止尾随逗号
🔧🧱📐💀
@typescript-eslint/comma-spacing
强制在逗号前后保持一致的间距
🔧🧱📐💀
@typescript-eslint/consistent-generic-constructors
强制在类型注解或构造函数调用的构造函数名称上指定泛型类型参数
🎨🔧
@typescript-eslint/consistent-indexed-object-style
要求或禁止使用 Record 类型
🎨🔧
@typescript-eslint/consistent-return
要求 return 语句始终或从不指定值
💭🧱
@typescript-eslint/consistent-type-assertions
强制一致使用类型断言
🎨🔧
💡
@typescript-eslint/consistent-type-definitions
强制类型定义始终使用 interfacetype
🎨🔧
@typescript-eslint/consistent-type-exports
强制一致使用类型导出
🔧💭
@typescript-eslint/consistent-type-imports
强制一致使用类型导入
🔧
@typescript-eslint/default-param-last
强制默认参数位于最后
🧱
@typescript-eslint/dot-notation
尽可能强制使用点表示法
🎨🔧💭🧱
@typescript-eslint/explicit-function-return-type
要求函数和类方法显式返回类型
@typescript-eslint/explicit-member-accessibility
要求类属性和方法显式访问修饰符
🔧
💡
@typescript-eslint/explicit-module-boundary-types
要求导出函数和类的公共类方法的显式返回和参数类型
@typescript-eslint/func-call-spacing
要求或禁止在函数标识符及其调用之间使用空格
🔧🧱📐💀
@typescript-eslint/indent
强制一致的缩进
🔧🧱📐💀
@typescript-eslint/init-declarations
要求或禁止在变量声明中初始化
🧱
@typescript-eslint/key-spacing
强制在类型和接口中的属性名称和类型注解之间保持一致的间距
🔧🧱📐💀
@typescript-eslint/keyword-spacing
强制在关键字前后保持一致的间距
🔧🧱📐💀
@typescript-eslint/lines-around-comment
要求注释周围有空行
🔧🧱📐💀
@typescript-eslint/lines-between-class-members
要求或禁止类成员之间有空行
🔧🧱📐💀
@typescript-eslint/max-params
强制函数定义中的参数数量上限
🧱
@typescript-eslint/member-delimiter-style
要求接口和类型字面量使用特定的成员分隔符样式
🔧📐💀
@typescript-eslint/member-ordering
要求一致的成员声明顺序
@typescript-eslint/method-signature-style
强制使用特定方法签名语法
🔧
@typescript-eslint/naming-convention
强制整个代码库的命名约定
💭
@typescript-eslint/no-array-constructor
禁止使用泛型Array构造函数
🔧🧱
@typescript-eslint/no-array-delete
禁止对数组值使用delete运算符
🔒💡💭
@typescript-eslint/no-base-to-string
要求.toString()仅在对对象进行字符串化时提供有用信息的情况下调用
💭
@typescript-eslint/no-confusing-non-null-assertion
禁止在可能造成混淆的位置使用非空断言
🎨💡
@typescript-eslint/no-confusing-void-expression
要求类型为void的表达式出现在语句位置
🔒🔧
💡
💭
@typescript-eslint/no-dupe-class-members
禁止重复的类成员
🧱
@typescript-eslint/no-duplicate-enum-values
禁止重复的枚举成员值
@typescript-eslint/no-duplicate-type-constituents
禁止重复的联合类型或交叉类型组成部分
🔧💭
@typescript-eslint/no-dynamic-delete
禁止对计算键表达式使用delete运算符
🔒🔧
@typescript-eslint/no-empty-function
禁止空函数
🎨🧱
@typescript-eslint/no-empty-interface
禁止声明空接口
🎨🔧
💡
@typescript-eslint/no-explicit-any
禁止使用any类型
🔧
💡
@typescript-eslint/no-extra-non-null-assertion
禁止额外的非空断言
🔧
@typescript-eslint/no-extra-parens
禁止不必要的括号
🔧🧱📐💀
@typescript-eslint/no-extra-semi
禁止不必要的分号
🔧🧱💀
@typescript-eslint/no-extraneous-class
禁止将类用作命名空间
🔒
@typescript-eslint/no-floating-promises
要求Promise-like语句得到适当处理
💡💭
@typescript-eslint/no-for-in-array
禁止使用for-in循环遍历数组
💭
@typescript-eslint/no-implied-eval
禁止使用eval()类似方法
💭🧱
@typescript-eslint/no-import-type-side-effects
当导入仅包含具有内联类型限定符的说明符时,强制使用顶级导入类型限定符
🔧
@typescript-eslint/no-inferrable-types
禁止为初始化为数字、字符串或布尔值的变量或参数显式声明类型
🎨🔧
@typescript-eslint/no-invalid-this
禁止在类或类对象之外使用this关键字
🧱
@typescript-eslint/no-invalid-void-type
禁止在泛型或返回类型之外使用void类型
🔒
@typescript-eslint/no-loop-func
禁止在循环语句中包含不安全引用的函数声明
🧱
@typescript-eslint/no-loss-of-precision
禁止使用会丢失精度的字面量数字
🧱
@typescript-eslint/no-magic-numbers
禁止使用魔数
🧱
@typescript-eslint/no-meaningless-void-operator
禁止使用void运算符,除非用于丢弃值
🔒🔧
💡
💭
@typescript-eslint/no-misused-new
强制newconstructor的有效定义
@typescript-eslint/no-misused-promises
禁止在未设计用于处理 Promise 的地方使用 Promise
💭
@typescript-eslint/no-mixed-enums
禁止枚举同时具有数字和字符串成员
🔒💭
@typescript-eslint/no-namespace
禁止使用 TypeScript 命名空间
@typescript-eslint/no-non-null-asserted-nullish-coalescing
禁止在空值合并运算符的左操作数中使用非空断言
🔒💡
@typescript-eslint/no-non-null-asserted-optional-chain
禁止在可选链表达式后使用非空断言
💡
@typescript-eslint/no-non-null-assertion
禁止使用!后缀运算符进行非空断言
🔒💡
@typescript-eslint/no-redeclare
禁止变量重新声明
🧱
@typescript-eslint/no-redundant-type-constituents
禁止联合和交集的成员没有任何作用或覆盖类型信息
💭
@typescript-eslint/no-require-imports
禁止调用require()
@typescript-eslint/no-restricted-imports
禁止通过import加载指定的模块
🧱
@typescript-eslint/no-shadow
禁止变量声明遮蔽外部作用域中声明的变量
🧱
@typescript-eslint/no-this-alias
禁止为this创建别名
@typescript-eslint/no-throw-literal
禁止将字面量作为异常抛出
💭🧱💀
@typescript-eslint/no-type-alias
禁止使用类型别名
💀
@typescript-eslint/no-unnecessary-boolean-literal-compare
禁止对布尔字面量进行不必要的相等比较
🔒🔧💭
@typescript-eslint/no-unnecessary-condition
禁止在类型始终为真或始终为假的情况下使用条件语句
🔒🔧💭
@typescript-eslint/no-unnecessary-qualifier
禁止使用不必要的命名空间限定符
🔧💭
@typescript-eslint/no-unnecessary-template-expression
禁止使用不必要的模板表达式
🔒🔧💭
@typescript-eslint/no-unnecessary-type-arguments
禁止使用等于默认值的类型参数
🔒🔧💭
@typescript-eslint/no-unnecessary-type-assertion
禁止使用不改变表达式类型的类型断言
🔧💭
@typescript-eslint/no-unnecessary-type-constraint
禁止对泛型类型进行不必要的约束
💡
@typescript-eslint/no-unsafe-argument
禁止使用any类型的参数调用函数
💭
@typescript-eslint/no-unsafe-assignment
禁止将any类型的赋值给变量和属性
💭
@typescript-eslint/no-unsafe-call
禁止调用any类型的函数
💭
@typescript-eslint/no-unsafe-declaration-merging
禁止不安全的声明合并
@typescript-eslint/no-unsafe-enum-comparison
禁止将枚举值与非枚举值进行比较
💡💭
@typescript-eslint/no-unsafe-member-access
禁止对类型为 any 的值进行成员访问
💭
@typescript-eslint/no-unsafe-return
禁止从函数中返回类型为 any 的值
💭
@typescript-eslint/no-unsafe-unary-minus
要求一元否定运算符接受一个数字
💭
@typescript-eslint/no-unused-expressions
禁止使用未使用的表达式
🧱
@typescript-eslint/no-unused-vars
禁止使用未使用的变量
🧱
@typescript-eslint/no-use-before-define
禁止在定义之前使用变量
🧱
@typescript-eslint/no-useless-constructor
禁止使用不必要的构造函数
🔒🧱
@typescript-eslint/no-useless-empty-export
禁止使用不改变模块文件内容的空导出
🔧
@typescript-eslint/no-useless-template-literals
禁止使用不必要的模板表达式
🔧💭💀
@typescript-eslint/no-var-requires
禁止使用 require 语句,除非在导入语句中
@typescript-eslint/non-nullable-type-assertion-style
强制使用非空断言而不是显式类型转换
🎨🔧💭
@typescript-eslint/object-curly-spacing
强制在花括号内保持一致的间距
🔧🧱📐💀
@typescript-eslint/only-throw-error
禁止将非 Error 值作为异常抛出
🔒💭🧱
@typescript-eslint/padding-line-between-statements
要求或禁止在语句之间添加空行
🔧🧱📐💀
@typescript-eslint/parameter-properties
要求或禁止在类构造函数中使用参数属性
@typescript-eslint/prefer-as-const
强制使用 as const 而不是字面量类型
🔧
💡
@typescript-eslint/prefer-destructuring
要求从数组和/或对象中解构
🔧💭🧱
@typescript-eslint/prefer-enum-initializers
要求每个枚举成员值都显式初始化
💡
@typescript-eslint/prefer-find
在查找单个结果时,强制使用 Array.prototype.find() 而不是 Array.prototype.filter() 后跟 [0]
💡💭
@typescript-eslint/prefer-for-of
尽可能强制使用 for-of 循环而不是标准 for 循环
🎨
@typescript-eslint/prefer-function-type
强制使用函数类型而不是带有调用签名的接口
🎨🔧
@typescript-eslint/prefer-includes
强制使用 includes 方法而不是 indexOf 方法
🔒🔧💭
@typescript-eslint/prefer-literal-enum-member
要求所有枚举成员都是字面量值
🔒
@typescript-eslint/prefer-namespace-keyword
要求使用 namespace 关键字而不是 module 关键字来声明自定义 TypeScript 模块
🎨🔧
@typescript-eslint/prefer-nullish-coalescing
强制使用空值合并运算符而不是逻辑赋值或链式操作
🎨💡💭
@typescript-eslint/prefer-optional-chain
强制使用简洁的可选链表达式而不是链式逻辑与、否定逻辑或或空对象
🎨🔧
💡
💭
@typescript-eslint/prefer-promise-reject-errors
要求使用 Error 对象作为 Promise 拒绝的原因
🔒💭🧱
@typescript-eslint/prefer-readonly
要求私有成员在构造函数之外从未被修改的情况下标记为 readonly
🔧💭
@typescript-eslint/prefer-readonly-parameter-types
要求函数参数类型为 readonly,以防止意外修改输入
💭
@typescript-eslint/prefer-reduce-type-parameter
在调用 Array#reduce 时强制使用类型参数,而不是强制转换
🔒🔧💭
@typescript-eslint/prefer-regexp-exec
如果未提供全局标志,则强制使用 RegExp#exec 而不是 String#match
🔧💭
@typescript-eslint/prefer-return-this-type
强制在仅返回 this 类型时使用 this
🔒🔧💭
@typescript-eslint/prefer-string-starts-ends-with
强制使用 String#startsWithString#endsWith 而不是其他等效的子字符串检查方法
🎨🔧💭
@typescript-eslint/prefer-ts-expect-error
强制使用 @ts-expect-error 而不是 @ts-ignore
🔧💀
@typescript-eslint/promise-function-async
要求任何返回 Promise 的函数或方法都标记为 async
🔧💭
@typescript-eslint/quotes
强制一致地使用反引号、双引号或单引号
🔧🧱📐💀
@typescript-eslint/require-array-sort-compare
要求 Array#sortArray#toSorted 调用始终提供 compareFunction
💭
@typescript-eslint/require-await
禁止不返回 promise 且没有 await 表达式的异步函数
💭🧱
@typescript-eslint/restrict-plus-operands
要求加法的两个操作数类型相同,并且为 bigintnumberstring
💭
@typescript-eslint/restrict-template-expressions
强制模板文字表达式为 string 类型
💭
@typescript-eslint/return-await
强制一致地等待返回的 promise
🔧
💡
💭🧱
@typescript-eslint/semi
要求或禁止分号,而不是 ASI
🔧🧱📐💀
@typescript-eslint/sort-type-constituents
强制类型联合/交集的组成部分按字母顺序排序
🔧
💡
💀
@typescript-eslint/space-before-blocks
强制块之前的一致空格
🔧🧱📐💀
@typescript-eslint/space-before-function-paren
强制函数括号之前的一致空格
🔧🧱📐💀
@typescript-eslint/space-infix-ops
要求在中缀运算符周围留出空格
🔧🧱📐💀
@typescript-eslint/strict-boolean-expressions
禁止在布尔表达式中使用某些类型
🔧
💡
💭
@typescript-eslint/switch-exhaustiveness-check
要求 switch-case 语句是穷尽的
💡💭
@typescript-eslint/triple-slash-reference
禁止使用某些三斜杠指令,而推荐使用 ES6 风格的导入声明
@typescript-eslint/type-annotation-spacing
要求类型注解周围的空格一致
🔧📐💀
@typescript-eslint/typedef
要求在某些地方使用类型注解
@typescript-eslint/unbound-method
强制未绑定方法使用其预期作用域调用
💭
@typescript-eslint/unified-signatures
禁止两个可以合并为一个的重载,可以使用联合类型或可选/剩余参数
🔒
@typescript-eslint/use-unknown-in-catch-callback-variable
强制在 .catch() 回调中将参数类型指定为 unknown
🔒🔧
💡
💭

过滤

配置组 (⚙️)

"配置组" 指的是包含该规则的 预定义配置。从配置预设扩展可以一次性启用大量推荐规则。

元数据

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

扩展规则

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

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

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',
},
};

在此页面中搜索 🧱 扩展规则 以查看所有扩展规则。