JetBrains Rider 2025.2 Help

JavaScript 和 TypeScript 中的代码检查

本主题列出了 JavaScript 和 TypeScript 中所有 JetBrains Rider 代码检查

您可以在 编辑器 | 检查设置 | 检查严重性 | 其他语言 设置页面  Ctrl+Alt+S 上切换特定检查或更改其严重性级别。

代码质量工具

检查

描述

默认严重性

ESLint

报告由 ESLint 检查器检测到的不一致。

突出显示基于 ESLint 配置文件 中为每个规则指定的规则严重性。

清除“使用配置文件中的规则严重性”复选框,以使用此检查中配置的严重性应用于所有 ESLint 规则。

已禁用

JSHint

报告由 JSHint 检查器检测到的问题。

已禁用

标准代码样式

报告由 JavaScript Standard Style 检查器检测到的不一致。

编辑器中的突出显示严重性基于检查器报告的严重性级别。

已禁用

TSLint

报告由 TSLint 检查器检测到的不一致。

突出显示基于 TSLint 配置文件 中为每个规则指定的规则严重性。

清除“使用配置文件中的规则严重性”复选框,以使用此检查中配置的严重性应用于所有 TSLint 规则。

已禁用

赋值问题

检查

描述

默认严重性

赋值可以替换为运算符赋值

报告可以用运算符赋值替代的赋值操作,以使代码更简洁且可能更清晰。

示例:

x = x + 3;

x = x / 3;

应用快速修复后,结果如下:

x += 3;

x /= 3;

已禁用

赋值给 'for' 循环参数

报告将值赋给声明为 for 循环参数的变量。 尽管偶尔是有意为之,但这种结构可能会极其令人困惑,并且通常是错误的结果。

已禁用

赋值给函数参数

报告对函数参数的赋值操作,包括递增和递减操作。 尽管偶尔是有意为之,但这种结构可能会极其令人困惑,并且通常是错误的结果。

已禁用

赋值用作条件

报告用作 if当...时fordo 语句条件的赋值。 尽管偶尔是有意为之,但这种用法令人困惑,并且通常表明存在拼写错误(例如, = 而非 ==)。

警告 警告

嵌套赋值

报告嵌套在另一个表达式中的赋值表达式,例如, a = b = 1。 此类表达式可能会引起混淆,并违反了一个构造应仅执行一项操作的通用设计原则。

已禁用

赋值结果被使用

报告在包含表达式中使用赋值结果的赋值表达式。 此类赋值通常表明存在编码错误,例如, = 而非 ==。 此外,由于操作顺序的原因,它们可能会导致混淆,因为赋值的求值可能会以意想不到的方式影响外部表达式。

括号中的表达式将被忽略。

已禁用

变量被赋值为自身

报告形式为 x = x 的赋值。

警告 警告

可能引起混淆的代码结构

检查

描述

默认严重性

令人困惑的浮点文字

报告任何没有小数点的浮点数,或小数点前没有数字,或小数点后没有数字的浮点数。 此类文字可能会引起混淆,并违反若干编码标准。

已禁用

令人困惑的 '+' 或 '-' 序列

报告 JavaScript 代码中 +- 字符的可疑组合(例如, a+++b)。 此类序列令人困惑,其语义可能会因空白的变化而改变。

已禁用

执行动态生成的代码

报告调用 eval()setTimeout()setInterval() 函数,或分配 函数 对象。 这些函数用于执行任意的 JavaScript 文本字符串,通常是动态生成的。 这可能会非常令人困惑,并且可能存在安全风险。

忽略在这些方法中静态提供回调函数而无需代码生成的情况。

已禁用

魔术数字

报告一个“魔术数字”,即未通过常量声明命名的数字字面量。 魔术数字可能导致代码意图不明确,并且如果一个魔术数字在一个代码位置被更改而在另一个位置未更改,可能会导致错误。 数字 0、1、2、3、4、5、6、7、8、9、10、100、1000、0.0 和 1.0 被忽略。

已禁用

取反的 'if' 语句

报告具有 else 分支和取反条件的 if 语句。 颠倒 if 和 else 分支的顺序通常会提高此类语句的清晰度。

已禁用

取反的条件表达式

报告条件被取反的条件表达式。 建议颠倒条件表达式中分支的顺序,以提高语句的清晰度。 示例: !条件 ? 2 :1

已禁用

嵌套的条件表达式

报告嵌套在另一个三元条件中的三元条件表达式。 此类嵌套条件可能会极其令人困惑,最好用更明确的条件逻辑替代。

已禁用

嵌套函数

报告嵌套在另一个函数中的函数。 尽管 JavaScript 允许函数嵌套,但此类结构可能会令人困惑。

使用下面的复选框忽略匿名嵌套函数。

已禁用

过于复杂的算术表达式

报告包含过多项的算术表达式。 此类表达式可能会引起混淆并容易出错。

使用下面的字段指定算术表达式中允许的最大项数。

已禁用

过于复杂的布尔表达式

报告包含过多项的布尔表达式。 此类表达式可能会引起混淆并容易出错。

使用下面的字段指定算术表达式中允许的最大项数。

已禁用

无意义的算术表达式

报告包含加减零、乘以零或一、除以一以及移位零的算术表达式。 此类表达式可能是未完全完成的自动重构的结果。

警告 警告

增量或减量结果被使用

报告在包含表达式中使用赋值结果的增量(++ )或减量(-- )表达式。 此类赋值可能会因操作顺序而引起混淆,因为赋值的求值可能会以意想不到的方式影响外部表达式。 示例: var a = b++

已禁用

带空主体的语句

报告带有空主体的 if当...时forwith 语句。 此类语句通常是拼写错误的结果,可能会引起混淆。

使用下面的复选框指定是否应报告主体为空块语句的语句。

警告 警告

不必要的块语句

报告未用作 iffor当...时dowithtry 语句主体,或未用作函数声明主体的块语句。 从 ECMAScript 6 开始,JavaScript 块为 letconst 变量引入了新的作用域,但独立的块语句在与 var 变量一起使用时,仍可能引起混淆并导致细微的错误。

已禁用

使用 'caller' 属性

报告在 JavaScript 函数中使用 caller 属性。 使用此属性访问调用方法的堆栈帧可能会极其令人困惑,并导致细微的错误。

警告 警告

有效性问题

检查

描述

默认严重性

引用全局对象的 'this' 表达式

报告在对象字面量或构造函数主体之外的 this 表达式。 此类 this 表达式引用顶级“全局”JavaScript 对象,但大多无用。

警告 警告

尝试赋值给 const 或只读变量

报告将值重新分配给常量或只读变量。

错误 错误

不是赋值或调用的表达式语句

报告既不是赋值也不是调用的表达式语句。 此类语句通常表明存在错误。

弱警告 弱警告

具有不一致返回值的函数

报告一个函数在某些情况下返回值,而在其他情况下不返回值。 这通常表明存在错误。

示例:

function foo() { if (true) return 3; return; }

已禁用

八进制整数

报告一个已弃用的八进制整数文字,其前缀为 0 而非 0o
此类文字在现代 ECMAScript 代码中不被允许,在严格模式下使用它们是错误的。
要在 ES5 和 ES3 语言级别中强制执行此检查,请选择下方的“警告 ES5- 代码中的过时八进制文字”复选框。

错误 错误

保留字用作名称

报告将 JavaScript 保留字用作名称。 JavaScript 规范保留了一些当前未用作关键字的单词。 如果 JavaScript 的后续版本开始将这些单词用作关键字,将它们用作标识符可能会导致代码损坏。

警告 警告

破坏 HTML 解析的字符串文字

报告包含 </ 序列的字符串文字。 此类字符串可能会导致嵌入 JavaScript 代码的任何 HTML 解析不正确。

已禁用

数据流

检查

描述

默认严重性

冗余的局部变量

报告一个不必要的局部变量,该变量不会使函数更易理解:

  • 一个立即返回的局部变量

  • 一个立即赋值给另一个变量且不再使用的局部变量

  • 一个始终与另一个局部变量或参数具有相同值的局部变量。

使用下面的复选框使此检查忽略立即返回或抛出的变量。 某些编码风格建议使用此类变量以提高代码清晰度并便于调试。

警告 警告

重复使用局部变量

报告重复使用局部变量,并用与原始变量用法无关的新值覆盖其值。 以这种方式重复使用局部变量可能会引起混淆,因为局部变量的预期语义可能会因每次使用而有所不同。 如果代码更改导致预期会被覆盖的值实际上仍然有效,这也可能导致错误。 保持变量生命周期尽可能短,并且不要为了简洁而重复使用局部变量是良好的实践。

已禁用

TypeScript

检查

描述

默认严重性

抽象类构造函数可以设为受保护

报告抽象类的公共构造函数,并建议将其设为受保护(因为将其设为公共是没有意义的)。

弱警告 弱警告

分配的构造函数字段参数

报告 TypeScript 代码中的一个常见错误,即类字段被声明为构造函数参数,然后该参数被赋值。
在这种情况下,相应的字段 不会 被赋值,仅修改了局部参数的值。

class Foo { constructor(private p: number) { p = 1; //must be this.p = 1; } }

警告 警告

重复的联合或交集类型组件

报告联合或交集中的重复类型。

警告 警告

显式类型

报告与当前显式类型代码样式不匹配的类型注解。

当从上下文推断出的类型与类型注解完全匹配时,不需要进行类型声明,例如:

var pi: number = 3.14

在某些情况下,始终使用显式类型是更可取的——这可以防止意外的类型更改,并使代码更加明确。

信息 无高亮,仅修复

字段可以设为只读

报告可以设为只读的私有字段(例如,如果该字段仅在构造函数中被赋值)。

弱警告 弱警告

不一致的 tsconfig.json 属性

报告 tsconfig.json 文件中 路径checkJsextends 属性的不一致。
checkJs 属性需要 allowJs
extends 属性应为有效的文件引用。

警告 警告

泛型类型参数不正确

报告函数、接口或类声明中无效的类型参数。

错误 错误

缺少增强导入

报告从 增强模块 使用时未显式导入。

信息 无高亮,仅修复

缺少全局库

报告一个 TypeScript 库文件,该文件是符号所需的,但未列在 lib 编译器选项中的 tsconfig.json 下。

错误 错误

缺少 tsconfig.json 选项

报告需要在 tsconfig.json 中显式选项的用法。 例如,要在 .tsx 文件中使用 JSX, tsconfig.json 必须包含 "jsx" 属性。

警告 警告

收窄的类型

报告变量类型被类型保护收窄的用法。 请注意,严重性级别不会影响此检查。

警告 警告

冗余的类型参数

报告与默认类型参数相同且可以移除的类型参数。

示例:

type Foo<T=number> = T; let z: Foo<number>;

弱警告 弱警告

引用的 UMD 全局变量

报告在当前文件为模块(ECMAScript 或 CommonJS)时使用 Universal Module Definition (UMD) 全局变量的情况。 在未显式导入的情况下引用 UMD 变量,如果库未被隐式包含,可能会导致运行时错误。

弱警告 弱警告

类型不匹配

报告参数、返回值或赋值表达式的类型不正确。

错误 错误

'any' 类型中的类型不匹配

报告函数调用中参数、返回值或赋值表达式的类型不正确,如果上下文符号可以隐式解析为 any 类型。

declare var test: any; test.hasOwnProperty(true); //reports 'true'

弱警告 弱警告

未解析的 TypeScript 引用

报告 TypeScript 代码中未解析的引用。

弱警告 弱警告

未解析的导入名称

报告 TypeScript 代码中 import 声明中未解析的名称或绑定。

错误 错误

可能的 bug

检查

描述

默认严重性

'for' 循环中更新或条件未使用循环变量

报告 for 循环,其中条件或更新未使用 for 循环变量。

已禁用

'typeof' 与非标准值的比较

报告将 typeof 表达式与非标准类型的字符串文字进行比较的情况: 未定义对象boolean数量字符串函数符号。 此类比较总是返回 false

警告 警告

比较具有不兼容类型的表达式

报告操作数类型不兼容或类型没有可能的共同值的比较。

弱警告 弱警告

与 NaN 的比较

报告与 NaN 的比较。 类似于 expr == NaNexpr === NaN 的比较总是被评估为 false

警告 警告

数组文字中的连续逗号

报告数组文字中的连续逗号。 跳过的元素接受 未定义 值,但这可能是无意为之,例如,当逗号位于一行的末尾和下一行的开头时。

警告 警告

构造函数返回原始值

报告返回原始值的构造函数。 当使用 new 调用时,此值将丢失,取而代之的是返回一个对象。 为避免警告,请使用 @return 标签指定函数的返回值。

已禁用

除以零

报告除以零或余数为零的情况。

已禁用

相等运算符可能导致类型强制转换

报告可能导致意外类型强制转换的相等运算符的使用。 建议将 ==!= 替换为类型安全的相等运算符 ===!==

根据所选选项,将报告以下情况之一:

  • 所有 ==!= 运算符的用法。

  • 除与 null 的比较外的所有用法。 某些代码样式允许使用 x == null 替代 x === null || x === undefined

  • 仅可疑的表达式,例如: ==!=0''nulltruefalse未定义 的比较。

警告 警告

无限循环语句

报告一个 forwhiledo 语句,该语句只能通过抛出异常退出。 此类语句通常表明存在编码错误。

警告 警告

无限递归

报告一个必须无限递归或抛出异常的函数。 此类函数可能无法正常返回。

警告 警告

索引属性访问的目标可能不正确

报告可能无效的索引属性访问,例如, Array[1]

警告 警告

可能无效的构造函数用法

报告可能无效的构造函数的使用,例如:在 new 之后不是构造函数的函数,使用构造函数的原型或在没有 new 的情况下调用构造函数。 构造函数假定具有大写名称(可选)或具有显式的 JSDoc @构造函数 标签。

警告 警告

可能无效的从闭包引用 'this'

报告在闭包中使用的 this ,用于引用外部上下文的属性。

示例:

function Outer() { this.outerProp = 1; function inner() { // bad, because 'outerProp' of Outer // won't be updated here // on calling 'new Outer()' as may be expected this.outerProp = 2; } inner(); }

警告 警告

可能无效的从闭包引用类的 'this'

报告尝试在非 lambda 的嵌套函数中通过 this. 限定符引用 ECMAScript 类的成员。
this 在非 lambda 的嵌套函数中是函数自身的 this ,与外部类无关。

警告 警告

对象分配结果被忽略

报告对象分配的结果被忽略的情况,例如, new Error(); 作为语句,而没有任何赋值。 此类分配表达式可能表明一种奇怪的对象初始化策略。

已禁用

可疑的 '=+' 赋值

报告形式为 a =+ b 的赋值。 建议替换为 a += b

警告 警告

将 'bind' 与箭头函数一起使用的可疑用法

报告与箭头函数一起使用的 bind
因为箭头函数使用词法 this ,所以 bind 调用对它们没有影响。
请参阅 此处 了解详细信息。

警告 警告

可疑的变量/参数名称组合

报告赋值或函数调用,其中目标变量或函数参数的名称与分配给它的值的名称不匹配。

示例:

var x = 0; var y = x;

或者

var x = 0, y = 0; var rc = new Rectangle(y, x, 20, 20);

此处检查猜测 x 被混淆了。

指定不应一起使用的名称。 如果参数名称或赋值目标名称包含某组中的单词,而分配或传递的变量名称包含另一组中的单词,则会报告错误。

警告 警告

使用了 void 函数的返回值

报告一个函数的返回值,而该函数实际上不返回任何内容。 调用此类函数总是会生成一个 未定义 值,这种赋值可能表明存在错误。

示例:

let a = console.log('foo');


以下用法将被忽略:

  • 在 return 语句中

  • 在某些二元运算中

  • 对于被重写的非 void 函数

警告 警告

try 语句问题

检查

描述

默认严重性

在 'finally' 块中使用 'continue' 或 'break'

报告在 finally 块中使用的 break继续 语句。 此类语句非常令人困惑,可能会隐藏异常,并使调试变得复杂。

警告 警告

在 'finally' 块中使用 'return'

报告在 finally 块中使用的 返回 语句。 此类 返回 语句可能会掩盖抛出的异常,并使调试变得复杂。

警告 警告

在 'finally' 块中使用 'throw'

报告在 finally 块中使用的 throw 语句。 此类 throw 语句可能会掩盖抛出的异常,并使调试变得复杂。

警告 警告

空的 'catch' 块

报告一个空的 catch 块。 这表明错误被简单地忽略了,而不是被处理。

catch 块中的任何注释都会使检查静音。

已禁用

空的 'finally' 块

报告一个空的 finally 块,这通常表明存在错误。

已禁用

空的 'try' 块

报告一个空的 try 块,这通常表明存在错误。

已禁用

异常用于本地控制流

报告一个 throw 语句,其异常总是被包含的 try 语句捕获。 将 throw 语句用作 转到 来更改本地控制流是令人困惑的。

警告 警告

未使用的 'catch' 参数

报告一个 catch 参数,该参数未在相应的块中使用。 名为 忽略已忽略catch 参数将被忽略。

使用下面的复选框禁用对带有注释的 捕捉 块的此检查。

已禁用

命名约定

检查

描述

默认严重性

类命名约定

报告一个类或函数,该类或函数带有 JSDoc @构造函数@类 标签,其名称过短、过长或不符合指定的正则表达式模式。

使用下面提供的字段指定类名的最小长度、最大长度和预期的正则表达式。 使用标准的 java.util.regex 格式表示正则表达式。

已禁用

函数命名约定

报告一个函数,其名称过短、过长或不符合指定的正则表达式模式。

使用下面提供的字段指定函数名称的最小长度、最大长度和正则表达式。 使用标准的 java.util.regex 格式表示正则表达式。

已禁用

函数参数命名约定

报告一个函数参数,其名称过短、过长或不符合指定的正则表达式模式。

使用下面提供的字段指定局部变量名称的最小长度、最大长度和预期的正则表达式。 使用标准的 java.util.regex 格式正则表达式。

已禁用

包含非 ASCII 符号的标识符

报告名称中包含非 ASCII 符号的情况。

如果选择了“仅允许 ASCII 名称”选项,则会报告所有包含非 ASCII 符号的名称。
否则报告所有同时包含 ASCII 和非 ASCII 符号的名称。

警告 警告

局部变量命名约定

报告局部变量的名称过短、过长或不符合指定的正则表达式模式。

使用下面提供的字段指定局部变量名称的最小长度、最大长度和预期的正则表达式。 使用标准的 java.util.regex 格式正则表达式。

已禁用

Flow 类型检查器

检查

描述

默认严重性

代码未被 Flow 覆盖

报告未被 Flow 类型检查器覆盖的 JavaScript 代码片段。 要使用此检查,请在 设置 | 语言与框架 | JavaScript 中配置 Flow 可执行文件。

已禁用

Flow 类型检查器

报告来自 Flow 的错误。

已禁用

位置不当的 @flow 标志

报告一个 @流程 标志注释,该注释未位于文件顶部。

警告 警告

缺少 .flowconfig

报告带有 @流程 标志的 JavaScript 文件,该文件在项目中没有关联的 .flowconfig 文件。

警告 警告

函数度量

检查

描述

默认严重性

包含超过三个取反的函数

报告包含三个或更多取反操作(!= )的函数。 此类函数可能会不必要地令人困惑。

已禁用

包含多个循环的函数

报告包含多个循环语句的函数。

已禁用

包含多个返回点的函数

报告包含多个返回点的函数。 此类函数难以理解和维护。

已禁用

包含过多参数的函数

报告包含过多参数的函数。 此类函数通常表明设计存在问题。

使用下面的字段指定函数允许的最大参数数量。

已禁用

过于复杂的函数

报告一个函数中分支点过多的情况(圈复杂度过高)。 此类函数可能会令人困惑且难以测试。

使用下面提供的字段指定函数允许的最大圈复杂度。

已禁用

过于冗长的函数

报告过于冗长的函数。 函数的长度通过计算函数中非空语句的数量来确定。 过于冗长的函数容易出错且难以测试。

使用下面的字段指定函数中允许的最大语句数量。

已禁用

过于嵌套的函数

报告一个函数,其主体包含嵌套过深的语句。 此类函数可能会令人困惑,并表明可能需要进行重构。

使用下面提供的字段指定函数中允许的最大嵌套深度。

已禁用

代码样式问题

检查

描述

默认严重性

'var' 未在函数开头声明

检查使用 var 声明的局部变量是否在函数作用域的顶部声明。

默认情况下,变量声明在代码执行时总是被隐式地移动(“提升”)到其包含作用域的顶部。 因此,在作用域顶部声明它们有助于在代码中体现这种行为。

已禁用

链式相等

报告链式相等比较(即 a==b==c)。 此类比较令人困惑。

已禁用

链式函数调用

报告一个函数调用,其目标是另一个函数调用,例如, foo().bar()

已禁用

比较中左侧的常量

报告左侧为常量值的比较操作。 根据编码约定,常量应位于比较的右侧。

已禁用

比较中右侧的常量

报告右侧为常量的比较操作。 根据编码约定,常量应仅位于比较的左侧。

已禁用

嵌套函数调用

报告一个函数调用,该调用被用作另一个函数调用的参数,例如, foo(bar())

已禁用

箭头函数主体周围的冗余大括号

报告一个箭头函数,其主体仅由大括号和一个语句组成。 建议转换为无大括号的简洁语法。

let incrementer = (x) => {return x + 1};

应用快速修复后,代码片段如下所示:

let incrementer = (x) => x + 1;

信息 无高亮,仅修复

没有大括号的语句主体

报告 if当...时forwith 语句,其主体不是块语句。 在语句主体中使用代码块通常对后续维护更安全。

已禁用

未定义属性赋值

报告将值赋给未在变量类型中定义的属性。

示例:

/** * @type {{ property1: string, property2: number }} */ let myVariable = create(); myVariable.newProperty = 3; // bad

弱警告 弱警告

不必要的括号

报告冗余的括号。

在表达式中:

var x = ((1) + 2) + 3

在箭头函数参数列表中:

var incrementer = (x) => x + 1

在 TypeScript 和 Flow 类型声明中:

type Card = (Suit & Rank) | (Suit & Number)

信息 无高亮,仅修复

未终止的语句

报告一个语句末尾没有分号或换行符的情况。

编辑器 | 代码样式 | JavaScript 或 TypeScript - 标点 中选择“用分号终止语句”选项,以报告任何未以分号结束的语句,即使使用了换行符。 根据某些编码风格,为了与其他语言保持一致,分号比换行符更受青睐。

已禁用

可能不理想的代码结构

检查

描述

默认严重性

'break' 语句

报告 break 语句。 忽略结束 case 块的 break 语句。

已禁用

带标签的 'break' 语句

报告带标签的 break 语句。

已禁用

'continue' 语句

报告一个 继续 语句。

已禁用

带标签的 'continue' 语句

报告带标签的 继续 语句。

已禁用

'debugger' 语句

报告用于与 JavaScript 调试器交互的 调试器 语句。 此类语句不应出现在生产代码中。

已禁用

'void' 表达式

报告一个 void 表达式。

已禁用

'with' 语句

报告 with 语句。 此类语句可能会导致隐式绑定的混淆,并且在设置新变量时可能表现异常。

警告 警告

匿名函数

报告匿名函数。 函数表达式的显式名称可能有助于调试。 如果函数表达式没有名称且具有 ECMAScript 6 标准中指定的 名称 属性,则忽略它们。 例如, var bar = function() {}; 不会被报告。

已禁用

逗号表达式

报告一个逗号表达式。 此类表达式通常是过于巧妙代码的标志,可能会导致细微的错误。 初始化器或 for 循环的更新部分中的逗号表达式将被忽略。

警告 警告

条件表达式

报告一个三元条件表达式。 某些编码标准禁止此类表达式,建议使用显式的 if 语句。

已禁用

带标签的语句

报告带标签的语句。

已禁用

DOM 问题

检查

描述

默认严重性

调用 'document.write()'

报告对 document.write()document.writeln() 的方法调用。 此类调用的大多数用法通过显式 DOM 调用(例如 getElementByID()createElement() )执行效果更佳。 此外, 写入()writeln() 调用在 XML DOM 中不起作用,包括以 XML 查看时的 XHTML DOM。 这可能会导致难以发现错误。

已禁用

不准确的平台检测

报告一种常见的 JavaScript 模式,用于检测脚本运行的浏览器或操作系统。 除了指出非可移植的结构外,这些平台检测模式通常不完整且容易被欺骗。 在大多数情况下,检测单个环境特性比尝试检测整个平台更可取。

检测到的模式包括:

  • document.all

  • document.layers

  • navigator.userAgent

  • navigator.oscpu

  • navigator.appName

  • navigator.appCodeName

  • navigator.platform

已禁用

不兼容的 XHTML 用法

报告可能会对 XHTML 文档造成问题的常见 JavaScript DOM 模式。 特别是,检测到的模式在文档作为 XML 或 HTML 加载时,其行为会完全不同。 这可能会导致细微的错误,其中脚本行为依赖于文档的 MIME 类型,而不是其内容。 检测到的模式包括 document.body、document.images、document.applets、document.links、document.forms 和 document.anchors。

已禁用

使用 'innerHTML' 属性

报告使用 innerHTML 属性以文本形式访问 DOM 节点的 JavaScript。 大多数 innerHTML 的用法通过显式 DOM 调用(例如 getElementByID()createElement() )执行效果更佳。 此外, innerHTML 在 XML DOM 中不起作用,包括以 XML 查看时的 XHTML DOM。 这可能会导致难以诊断错误。

已禁用

导入和依赖

检查

描述

默认严重性

package.json 中的依赖项不匹配

报告 package.json 中未安装或与指定的 版本范围 不匹配的依赖项。

警告 警告

缺少 JSX 命名空间

报告在未导入命名空间的情况下使用 JSX 构造。 在文件范围内拥有命名空间可确保代码正确编译。

信息 无高亮,仅修复

缺少模块依赖

报告一个模块,该模块通过 require() 调用或 import 语句使用,但未安装或未列在 package.json 的依赖项中。

建议安装该模块并将其包含到 package.json 中。

对于 require() 调用,仅适用于 Node.js 核心 JavaScript 库范围内的文件。

弱警告 弱警告

使用了 URL 导入

检查 JavaScript 语言中使用的 URL 导入。 建议为指定的远程 URL 下载模块。 这种关联使 IDE 能够提供适当的代码补全和导航功能。

导入说明符中的 URL 仅支持 JavaScript 语言中的 ECMAScript 模块。

信息 无高亮,仅修复

未使用的导入

报告一个冗余的 import 语句。 通常情况下,如果导入的符号未在源文件中使用,就会出现这种情况。 为避免副作用,请考虑使用裸导入 import 'packageName' 而不是常规导入。

警告 警告

将 package.json 依赖项更新到最新版本

建议将您的 package.json 依赖项升级到最新版本,忽略指定的版本。

信息 无高亮,仅修复

Node.js

检查

描述

默认严重性

未解析的 Node.js API

建议为 Node.js 配置代码辅助功能,例如, require 和核心模块('path'、'http'、'fs' 等)。

请参阅 https://nodejs.org/api/ 以获取完整列表。

警告 警告

单元测试

检查

描述

默认严重性

在测试代码中高亮失败行

报告测试中失败的方法调用或断言。

警告 警告

无效的 Karma 配置文件

报告 Karma 配置文件中文件路径('basePath'、'files')的潜在错误,例如, karma.conf.js

警告 警告

React

检查

描述

默认严重性

无效的 DOM 元素嵌套

检测 JSX 文件中未按照 DOM 规范正确嵌套的 HTML 元素。 React 会在元素嵌套不正确时报告运行时警告。

警告 警告

异步代码和 Promise

检查

描述

默认严重性

在非异步函数中使用 'await'

报告在函数中使用 await 的情况,该函数可能本应是异步的,但实际上缺少 异步 修饰符。 尽管 await 可以用作标识符,但它很可能是打算用作运算符,因此包含它的函数应设为 异步

弱警告 弱警告

异步函数调用缺少 await

报告在 异步 函数中未带预期的 await 前缀的 异步 函数调用。 此类调用返回一个 承诺 ,控制流会立即继续。

示例:

async function bar() { /* ... */ } async function foo() { bar(); // bad }

应用快速修复后,添加了 await 前缀:

async function bar() { /* ... */ } async function foo() { await bar(); // good }


当选中“报告返回语句中的 Promise”复选框时,还建议在返回语句中添加 await
虽然这通常不是必需的,但它带来了两个主要好处。

  • 当您用 try-catch 包围代码时,您不会忘记添加 await

  • 显式的 await 有助于 V8 运行时提供 异步堆栈跟踪

弱警告 弱警告

冗余的 'await' 表达式

报告冗余使用 await 的情况,例如 await await ,或等待非 Promise 的结果。

当选中“报告 Promise”选项时,建议在适用的情况下(在 返回 语句中以及与 Promise.resolve/reject 一起使用时)移除 Promise 前的 await

在此类上下文中移除 await 会导致两个问题。

  • try-catch 包围您的代码并忘记添加 await 会更改代码语义,而您可能未能注意到这一点。

  • 显式的 await 可能会阻止 V8 运行时提供 异步堆栈跟踪

弱警告 弱警告

返回 Promise 的方法调用结果被忽略

报告一个函数调用,该调用返回一个 承诺 ,但之后未被使用。 此类调用通常是无意的,并表明存在错误。

弱警告 弱警告

顶级 'await' 表达式

报告顶级 await 表达式的使用。 虽然新的“顶级异步”提案正在推进,但在异步函数之外使用 await 是不被允许的。

已禁用

控制流问题

检查

描述

默认严重性

'for' 循环可以替换为 'while' 循环

报告一个 for 循环,该循环既不包含初始化也不包含更新组件。 建议将循环替换为更简单的 当...时 语句。

示例:

for(; exitCondition(); ) { process(); }

应用快速修复后,结果如下:

while(exitCondition()) { process(); }

如果您希望此检查忽略条件简单或不存在的 for 循环,请使用下面的复选框。

已禁用

具有相同分支的 'if' 语句

报告一个 if 语句,其 然后else 分支相同。 此类语句几乎可以肯定是错误的。

已禁用

具有过多分支的 'if' 语句

报告一个 if 语句,其分支过多。 此类语句可能会令人困惑,并且通常表明设计抽象水平不足。

使用下面的字段指定预期的最大分支数量。

已禁用

具有相同分支的条件表达式

报告具有相同 然后else 分支的三元条件表达式。

已禁用

常量条件表达式

报告格式为 true? result1:result2false? result1:result2。 建议简化该表达式。 的条件表达式

警告 警告

'if' 语句中的重复条件

报告 if 语句中不同分支的重复条件。 重复条件通常表示程序员的疏忽。

示例:

if (a) { ... } else if (a) { ... }

已禁用

不会循环的循环语句

报告一个 for当...时do 语句,其主体保证最多只执行一次。 通常,这表明存在错误。

警告 警告

对象为 'null' 或 'undefined'

报告由于在 未定义null 的对象上调用方法、访问属性或调用函数而导致的错误。

警告 警告

无意义的语句或布尔表达式

报告无意义或过于复杂的布尔表达式或语句。

示例:

let a = !(false && x); let b = false || x;

应用快速修复后,结果如下:

let a = true; let b = x;

警告 警告

冗余的 'if' 语句

报告一个 if 语句,该语句可以简化为单个赋值或 返回 语句。

示例:

if(foo()) { return true; } else { return false; }

应用快速修复后,代码如下所示:

return foo();

警告 警告

冗余的条件表达式

报告格式为以下形式的条件表达式

condition ? true : false condition ? false : true

这些表达式可以安全地转换为

condition !condition

警告 警告

尾递归

报告尾递归,即函数在返回之前将自身调用作为最后一个操作。 尾递归始终可以用循环替代,这将显著提高速度。 某些 JavaScript 引擎会执行此优化,而其他引擎则不会。 因此,尾递归解决方案在不同环境中的性能特性可能会有显著差异。

已禁用

不必要的 'continue' 语句

报告循环末尾不必要的 继续 语句。 建议移除此类语句。

警告 警告

不必要的 'return' 语句

报告一个不必要的 返回 语句,即一个 返回 语句,该语句不返回任何值,并且出现在函数即将“落到底部”之前。 这些语句可以安全地移除。

警告 警告

不必要的标签

报告未使用的标签。

警告 警告

不必要的 'break' 语句标签

报告带标签的 break 语句,其标签可以在不改变控制流的情况下移除。

警告 警告

不必要的 'continue' 语句标签

报告带标签的 继续 语句,其标签可以在不改变控制流的情况下移除。

警告 警告

不可达代码

报告永远无法执行的代码,这几乎可以肯定表明存在错误

警告 警告

不健全的类型保护检查

报告 typeofinstanceof 的不健全类型保护检查。 typeof x 类型保护在以下两种情况下可能是不健全的:

  • typeof x 永远不会对应于指定的值(例如,当 x 的类型为 'string | boolean' 时, typeof x === 'number'

  • typeof x 始终对应于指定的值(例如,当 x 的类型为 'string' 时, typeof x === 'string'


x instanceof A 类型保护在以下两种情况下可能是不健全的:

  • x 的类型与 A 无关

  • x 的类型是 AA 的子类型

警告 警告

ES2015 迁移辅助

检查

描述

默认严重性

使用 'for..in' 而不是 'for..of'

报告在数组上使用 for..in 循环的情况。 建议将其替换为 for..of 循环。
for..of 循环,这些循环在 ECMAScript 6 中引入,用于迭代 可迭代对象 对象。 对于数组,此结构比 for..in 更可取,因为它仅适用于数组值,而不适用于数组对象的属性。

信息 无高亮,仅修复

使用 'let' 而不是 'const'

报告一个 let 声明,该声明可以设为 const

信息 无高亮,仅修复

使用 'module.exports' 而不是 'export'

报告一个 module.export 语句。 建议将其替换为 导出export default 语句。

请注意,将 module.export 转换为 导出 的快速修复不适用于函数或语句中的 module.export ,因为 导出 语句只能位于模块的顶层。

信息 无高亮,仅修复

使用 'require()' 而不是 'import'

报告一个 require() 语句。 建议将其转换为带有 import 语句的 require() 调用。

启用“使用全部修复操作转换嵌套作用域内的 require()”以在使用“全部修复”操作时转换嵌套函数和语句中的所有 require() 调用。

请注意,将嵌套作用域内的 require() 语句转换为 import 语句可能会导致代码语义发生变化。 导入语句是静态模块依赖项,并且会被提升,这意味着它们会被移动到当前模块的顶部。 require() 调用动态加载模块。 它们可以有条件地执行,其作用域由使用它们的表达式定义。
清除“使用全部修复操作转换嵌套作用域内的 require()”复选框,以防止在使用“全部修复”操作时对这些复杂情况进行任何更改。

信息 无高亮,仅修复

使用 'var' 而不是 'let' 或 'const'

报告一个 var 声明,该声明被用作 letconst 的替代。
letconst 都是块级作用域,并且行为更严格。

建议将所有 var 声明替换为 letconst 声明,具体取决于特定值的语义。 声明可以移到函数顶部或放在变量首次使用之前,以避免引用错误。
选择“保守地使用全部修复操作转换 var”选项,以在使用“全部修复”操作时防止在这些复杂情况下进行任何更改。

弱警告 弱警告

使用函数表达式而不是箭头函数

报告一个 函数 表达式。 建议将其转换为 箭头函数

示例:

arr.map(function(el) {return el + 1})

应用快速修复后,代码如下所示:

arr.map(el => el + 1)

信息 无高亮,仅修复

使用索引 'for' 而不是 'for..of'

报告在数组上使用索引 for 循环的情况。 建议将其替换为 for..of 循环。
for..of 循环在 ECMAScript 6 中引入,用于迭代 可迭代对象 对象。

信息 无高亮,仅修复

使用字符串连接而不是模板字符串

报告字符串连接。 建议将其替换为 模板字符串

示例

"result: " + a + "."

应用快速修复后,代码如下所示:

`result: ${a}.`

信息 无高亮,仅修复

常规

检查

描述

默认严重性

已弃用的符号被使用

报告已弃用函数变量的使用。

弱警告 弱警告

具有相同键的解构属性

报告具有相同键的多个解构属性。 建议合并这些属性。

弱警告 弱警告

重复声明

报告在同一作用域中的多个声明。

警告 警告

未遵循 ECMAScript 规范

报告基本语法问题和与语言规范的不一致,例如关键字的无效用法、不兼容的数字格式用法或 getter/setter 的多个参数。
通常,此类错误必须始终被报告,不应被禁用。 但在某些情况下,例如由于 JavaScript 的动态特性导致的问题、尚未支持的语言特性或 IDE 检查器中的错误,禁用报告这些非常基本的错误可能会很方便。

错误 错误

隐式声明的全局 JavaScript 变量

报告隐式声明的全局变量。

示例:

var aaa = 1; // good bbb = 2; // bad, if bbb is not declared with 'var' somewhere

弱警告 弱警告

导入可以简化

报告一个 ES6 导入,其 部分可以简化。 建议导入父目录。

警告 警告

引用了不可访问的 @private 和 @protected 成员

报告对标有 @private@protected 标签的 JavaScript 成员的引用,但未遵守这些标签所暗示的可见性规则。

警告 警告

JSDoc 标签的错误用法

报告由 Google Closure 编译器 注解暗示的警告,包括正确使用 @抽象@interface@实现 标签。

警告 警告

JQuery 选择器可以优化

报告一个重复的 jQuery 选择器,该选择器可以被缓存,或者一个属性或伪选择器的使用(可选)。

警告 警告

使用了 JSX 语法

报告在 JavaScript 代码中使用 JSX 标签的情况。

已禁用

方法可以设为 'static'

报告一个类方法,该方法可以安全地设为 静态。 如果方法未引用其类的任何非静态方法和非静态字段,并且未在子类中被重写,则可以将其设为 静态

使用下面的第一个复选框仅检查 私有 方法。

信息 无高亮,仅修复

JSDoc 与函数签名不匹配

报告 JSDoc 注释中的参数名称和数量与函数的实际参数不匹配的情况。 建议更新 JSDoc 注释中的参数。

示例:

/** * @param height Height in pixels */ function sq(height, width) {} // width is not documented

应用快速修复后:

/** * @param height Height in pixels * @param width */ function sq(height, width) {}

警告 警告

查询和更新集合不匹配

报告字段或变量集合的内容被查询但未更新,或被更新但未查询的情况。 此类不匹配的查询和更新毫无意义,可能表明是无效代码或拼写错误。

查询方法会自动检测,基于它们是否返回某些内容或是否传递了回调函数。 使用下表指定哪些方法是更新方法。

警告 警告

缺少本地存储的 HTTP 链接库

报告一个外部 JavaScript 库的 URL,该库未与任何本地存储的文件关联。 建议下载该库。 这种关联使 IDE 能够提供适当的代码补全和导航功能。

警告 警告

未使用严格模式

报告未处于 严格 模式的 JavaScript 文件。

已禁用

使用了原始类型对象包装器

报告对原始类型包装器的不当使用或对原始类型属性的修改,因为在后一种情况下,分配的值将会丢失。

警告 警告

属性可以替换为简写

报告一个可以转换为 ES6 简写样式的对象属性,并提供快速修复来完成此操作。

示例:

var obj = {foo:foo}

应用快速修复后,代码如下所示:

var obj = {foo}

信息 无高亮,仅修复

模板字符串中的冗余嵌套

报告字符串或模板字符串的嵌套实例。 建议将嵌套实例内联到包含的模板字符串中。

示例:

let a = `Hello, ${`Brave ${"New"}`} ${"World"}!`

应用快速修复后,代码如下所示:

let a = `Hello, Brave New World!`

弱警告 弱警告

从闭包引用可变变量

报告从函数访问外部可变变量的情况。

示例:

for (var i = 1; i <= 3; i++) { setTimeout(function() { console.log(i); // bad }, 0); }

警告 警告

签名不匹配

报告一个 JavaScript 调用表达式,其中参数与引用函数的签名不匹配,包括参数的类型和数量。 此外,如果重载函数在参数和返回类型方面与被重载的函数不匹配,也会报告。

忽略 TypeScript 代码。

弱警告 弱警告

JSDoc 中的语法错误和未解析的引用

报告文档注释中的语法差异。

警告 警告

未过滤的 for..in 循环

报告未过滤的 for-in 循环。

使用此结构不仅会处理对象的自身属性,还会处理其原型中的属性。 在某些特定情况下,这可能是意料之外的,例如,在复制或修改所有属性的实用方法中,或者当 对象 的原型可能被错误修改时。 例如,以下代码将打印 42 和 myMethod:

Object.prototype.myMethod = function myMethod() {}; let a = { foo: 42 }; for (let i in a) { console.log(a[i]); }

建议将整个循环替换为 Object.keys() 方法或添加 hasOwnProperty() 检查。 应用快速修复后,代码如下所示:

for (let i in a) { if (a.hasOwnProperty(i)) { console.log(a[i]); } }

已禁用

不必要的分号

报告一个不必要的分号。

警告 警告

数组文字中不需要的最后一个逗号

报告在数组文字中使用尾随逗号的情况。

仅当 JavaScript 语言版本设置为 ECMAScript 5.1 时才会报告此警告。

尽管规范允许数组中的尾随逗号,但某些浏览器在使用尾随逗号时可能会抛出错误。

您可以在代码样式 | JavaScript 或 TypeScript | 标点中配置尾随逗号的格式选项。

警告 警告

对象文字中不需要的最后一个逗号

报告在对象文字中使用尾随逗号的情况。

仅当 JavaScript 语言版本设置为 ECMAScript 5.1 时才会报告此警告。

对象文字中的尾随逗号是规范允许的,但某些浏览器在使用尾随逗号时可能会抛出错误。

您可以在代码样式 | JavaScript 或 TypeScript | 标点中配置尾随逗号的格式选项。

警告 警告

未解析的 Ext JS xtype

报告一个 Ext JS xtype 引用,该引用没有对应的类。

警告 警告

未解析的 JSX 组件

报告对 JSX 组件的未解析引用。 建议添加缺少的导入语句(如果引用的组件在项目或其依赖项中定义),或者创建一个具有此名称的新组件。

新组件的模板可以在编辑器 | 文件和代码模板中修改。

弱警告 弱警告

未解析的 JavaScript 引用

报告 JavaScript 代码中未解析的引用。

忽略 TypeScript 代码。

弱警告 弱警告

未解析的文件引用

报告 JavaScript 文件中未解析的文件引用,包括 CommonJS 和 AMD 模块引用。

警告 警告

在静态初始化器中使用可能未赋值的属性

报告一个类成员初始化器,该初始化器引用了另一个未提升的类成员,而后者可能尚未初始化。

类成员的初始化按字段顺序依次进行,因此一个字段不能引用稍后声明的另一个字段。

警告 警告

变量声明可以与第一次赋值合并

报告一个未初始化声明的变量,该变量在代码中更远处或单个嵌套作用域中被使用。 建议将变量移到更接近其使用的位置,并将其与初始化表达式合并。

信息 无高亮,仅修复

Webpack 配置与 JSON Schema 的兼容性

验证 webpack 配置文件中的选项(其名称应以 `webpack` 开头,例如 `webpack.config.js`),并与 webpack 选项模式 进行对比。

禁用此检查以关闭验证和配置对象内的代码补全功能。

警告 警告

switch 语句问题

检查

描述

默认严重性

'default' 不是 'switch' 中的最后一个 case

报告一个 switch 语句,其中 默认 case 出现在另一个 case 之前,而不是作为最后一个 case,这可能会引起混淆。

已禁用

'switch' 语句缺少分支

报告一个 switch 语句,该语句针对类型为 enumunion 的变量,但未涵盖该类型的一些值选项。

信息 无高亮,仅修复

'switch' 语句没有 'default' 分支

报告一个 switch 语句,当某些可能的值未被枚举时,该语句没有 默认 子句。

信息 无高亮,仅修复

'switch' 语句是多余的,可以被替换

报告一个 switch 语句,该语句具有空主体,或仅有一个 case 分支,或仅有一个 默认 分支。

信息 无高亮,仅修复

重复的 'case' 标签

报告在 switch 语句上重复的 case 标签,这通常表明存在错误。

警告 警告

'switch' 语句中的贯穿

报告一个 switch 语句,其中控制可以从一个分支继续到下一个分支。 此类“贯穿”通常表明存在错误,例如,缺少 break返回

警告 警告

嵌套的 'switch' 语句

报告嵌套在另一个 switch 语句中的 switch 语句。 嵌套的 switch 语句可能会非常令人困惑,尤其是在缩进不一致的情况下。

已禁用

'switch' 语句中的文本标签

报告在 switch 语句中带标签的语句,这通常是拼写错误的结果。

示例:

switch(x) { case 1: case2: //typo! case 3: break; }

已禁用

不可达的 'switch' 语句 'case' 分支

报告 switch 语句中不可达的 case 分支。

示例:

/** * @param {('foo' | 'bar')} p */ function foo(p) { switch (p) { case 'foo': break; case 'bar': break; case 'baz': break; // unreachable } }

警告 警告

变量在不同的 'case' 子句中声明并被使用

报告在 switch 语句的一个 case 子句中声明但在同一语句的另一个 case 子句中使用的变量。 对于块级作用域变量,这会导致抛出一个 ReferenceError。 对于 var 变量,这表明可能存在错误。

如果此模式是有意使用的,请禁用对 var 变量的检查。

警告 警告

按位运算问题

检查

描述

默认严重性

按位表达式可以简化

报告包含 以及 与零、 或者 除以零或移位零的表达式。 此类表达式可能是未完全完成的自动重构的结果。

已禁用

按位运算符的使用

报告可疑的按位与(" & ")或按位或(" | ")运算符的使用。 通常这是一个拼写错误,预期的结果是应用布尔运算 AND(" && ")和 OR(" || ")。

警告 警告

不兼容的按位掩码操作

报告一个按位掩码表达式,该表达式肯定会评估为 truefalse。 表达式的形式为 (var & constant1) == constant2(var | constant1) == constant2 ,其中 constant1constant2 是不兼容的位掩码常量。

示例:

// Incompatible mask: as the last byte in mask is zero, // something like 0x1200 would be possible, but not 0x1234 if ((mask & 0xFF00) == 0x1234) {...}

警告 警告

可能错误常量的移位操作

报告移位操作,其中第二个操作数是超出合理范围的常量,例如,整数移位操作超出范围 0..31 ,移位为负值或过大的值。

警告 警告

未使用的符号

检查

描述

默认严重性

未使用的赋值

报告一个赋值后从未使用其值的变量。
建议移除未使用的变量以缩短代码并避免冗余分配。

报告以下情况:

  • 变量在赋值后从未被读取。

  • 变量的值在下一次读取之前总是被另一个赋值覆盖。

  • 变量的初始化器是多余的(出于上述原因之一)。

警告 警告

未使用的全局符号

报告未使用的全局可访问公共函数、变量、类或属性。

警告 警告

未使用的局部符号

报告未使用的局部可访问参数、局部变量、函数、类或私有成员声明。

警告 警告

最后修改日期: 2025年 9月 26日