VS Code中ES6 imports智能提示(IntelliSense)失效及类型推断异常问题的解决方法咨询
我之前也碰到过一模一样的问题,折腾了好几种方法才搞定,给你整理几个最有效的方案:
先把配置文件搞对(tsconfig.json/jsconfig.json)
不管你用的是TypeScript还是纯JavaScript,这个配置文件是IntelliSense的核心。JS项目根目录要有jsconfig.json,TS项目则是tsconfig.json,关键配置得跟上:compilerOptions.module设为ESNext或ES6,和你的ES6导入语法匹配compilerOptions.target至少设成ES6compilerOptions.esModuleInterop开成true,解决CommonJS和ES模块互导的类型兼容问题include数组要包含你的源码文件夹,比如["src/**/*"],确保VS Code能扫到所有文件
给你贴个实用的
jsconfig.json例子:{ "compilerOptions": { "module": "ESNext", "target": "ES6", "esModuleInterop": true, "checkJs": true // JS项目一定要开这个,才能让TS帮你做类型推断 }, "include": ["src/**/*"] }核对VS Code用的TypeScript版本
VS Code自带了TS服务,但本地项目的TS版本和编辑器自带的不匹配很容易出bug。按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(Mac),搜TypeScript: Select TypeScript Version,选Use Workspace Version(前提是你项目里装了本地TS)。没装的话赶紧在项目里装一个:npm install typescript --save-dev检查导入导出的写法是否对应
你的MyClass导出方式和导入方式必须对应,不然VS Code根本识别不了类型:- 如果是默认导出:
// MyClass.js export default class MyClass { /* 类内容 */ } // 导入的时候 import MyClass from './MyClass.js'; const cl = new MyClass(); // 这下应该能正确推断成MyClass类型了 - 如果是命名导出:
// MyClass.js export class MyClass { /* 类内容 */ } // 导入的时候 import { MyClass } from './MyClass.js'; const cl = new MyClass();
导出导入不匹配的话,类型推断直接拉胯成
any太正常了。- 如果是默认导出:
重启TS服务试试
有时候TS服务会抽风,按Ctrl+Shift+P(或Cmd+Shift+P),搜TypeScript: Restart TS Server,重启之后很多小问题直接就没了,这招我用得最多。检查类型定义是否齐全
如果MyClass是第三方库的类,记得装对应的类型定义包:npm install @types/[你的库名] --save-dev要是是你自己写的模块,别在文件顶部加
// @ts-nocheck(这会直接禁用类型检查),JS文件的话反而要加// @ts-check强制开启类型检查。极端情况清缓存
要是上面的方法都没用,试试清VS Code缓存:关掉编辑器,删掉对应目录的缓存文件(不用全删,针对性删TS相关的就行):- Windows:
%USERPROFILE%\.vscode\extensions(找TypeScript相关的扩展文件夹) - Mac:
~/Library/Application Support/Code/Cache和~/Library/Application Support/Code/CachedData
重新打开VS Code加载项目,说不定就好了。
- Windows:
这些方法我亲测有效,一步步排查下来应该能解决你的问题。
内容的提问来源于stack exchange,提问作者user1167761

