JavaScript 稳定性关键在于早期暴露错误,需启用 TypeScript strict 模式、ESLint 类型检查规则、errorLens 可视化提示及 Auto Import 类型导入支持,并确保 jsconfig/tsconfig 配置到位。

JavaScript 代码写出来能跑,不等于写得稳。真正影响稳定性的,往往是类型模糊、未处理的 Promise、隐式转换、全局污染这些“安静的错误”。VSCode 插件不是万能解药,但配对得当,能在编码阶段就卡住大部分隐患。
ESLint + TypeScript 配置必须启用 noImplicitAny 和 strict
很多 JS 项目装了 ESLint 却没开严格模式,导致 any 类型泛滥、undefined 访问不报错。这不是插件问题,是配置漏项。
- 必须在
tsconfig.json中启用"strict": true,否则@typescript-eslint规则形同虚设 -
noImplicitAny、strictNullChecks、noUncheckedIndexedAccess这三项建议单独设为true,比只开strict更可控 - ESLint 配置里要显式包含
plugin:@typescript-eslint/recommended-requiring-type-checking,否则类型相关规则(如await-thenable)不会触发 - 如果用的是
create-react-app或 Vite 默认模板,需手动添加jsconfig.json并开启"checkJs": true才能对 .js 文件生效
errorLens 要配合 eslint 插件一起启用,不能只装不用
errorLens 本身不检测错误,它只是把其他工具(ESLint、TypeScript Server)抛出的问题“怼到行内”。装了不配,等于买了放大镜却没给光源。
- 确保
eslint插件已安装且项目根目录有有效配置(.eslintrc.js或package.json中的eslintConfig) - VSCode 设置中打开
"errorLens.showTooltip": false,避免悬停遮挡代码;错误提示优先级高于警告,别关掉"errorLens.showWarning": true - 遇到
errorLens不显示问题?先运行npx eslint . --ext .js,.ts看终端是否真报错——若无输出,说明 ESLint 根本没扫到文件
Auto Import 插件默认不处理类型导入,容易引发 TS2307
JSX/TSX 中自动补全 import React from 'react' 很方便,但类型导入(import type { Props } from './types')默认被忽略。混用值导入和类型导入,打包时可能被误删,运行时报 Cannot read property 'xxx' of undefined。
- 安装
Auto Import后,必须在 VSCode 设置中开启"auto-import.autoImportOnTyping": true和"auto-import.showAutoImportSuggestions": true - 关键:设置
"auto-import.insertInTypes": true,否则类型导入永远不自动补全 - 检查
jsconfig.json或tsconfig.json是否含"importsNotUsedAsValues": "error",这是 TypeScript 层面强制区分类型/值导入的开关 - 如果项目用 Vite,还需确认
vite.config.ts中resolve.dedupe没把@types包 dedupe 掉,否则类型导入路径解析失败
Promise 链断裂是 JS 最隐蔽的稳定性杀手,ESLint 规则要开 require-await 和 no-floating-promises
没 await 的 Promise、没 catch 的链式调用,错误会静默吞掉,日志里找不到源头。这类问题靠肉眼几乎无法排查。
-
require-await防止 async 函数里忘写 await;no-floating-promises(来自@typescript-eslint)拦截未处理的 Promise 实例 - 注意:这两个规则在纯 JS 项目中效果有限,必须搭配 TypeScript 或至少开启
checkJs: true+ JSDoc 类型标注 - 常见陷阱:在
setTimeout(() => promiseFn(), 0)或事件回调里调用 Promise,no-floating-promises默认不捕获——需额外加"@typescript-eslint/no-floating-promises": ["error", { "ignoreVoid": true }] - 真实场景中,
fetch忘加await导致后续逻辑读取undefined,错误堆栈指向下游而非源头。开规则后,VSCode 直接标红第一行fetch(...),省去半小时排查
JS 稳定性不靠堆插件,而靠让错误在写代码时就暴露出来。上面四点里,任意一条配置不到位,插件都只是装饰品。最常被跳过的其实是 tsconfig.json 的 strict 开关和 jsconfig.json 的 checkJs——它们才是整个链条的起点。


















