我有一个仅包含三个文件的项目目录:
test-proj/
hello.js
index.html
jsconfig.json
hello.js
如下所示:
const a = jQuery('<div>');
const b = React.Component;
const c = Vue({ el: '#app' });
index.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test Page</title>
</head>
<body>
<div id="app"></div>
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="./hello.js"></script>
</body>
</html>
jsconfig.json
:
{
"compilerOptions": {
"checkJs": true
}
}
当我打开test-proj
目录并打开hello.js
时,VS Code的类型检查器报告三个错误:
现在,我修改了jsconfig.json
,以便VS Code可以自动获取所有三个类型:
{
"compilerOptions": {
"checkJs": true
},
"typeAcquisition": {
"include": [
"jquery",
"react",
"vue"
]
}
}
...这使VS Code可以识别jQuery和React可以在我的脚本中使用。但是,正如您在此处看到的那样,它仍然无法识别Vue:
TLDR:为什么VS Code不能为React和jQuery获取Vue的类型定义?
(注意:这不是Node.js项目。我的项目目录下没有package.json
或node_modules/
。我还检查了全局安装的npm
软件包,只是为了可以,但是我没有安装react
或jquery
。)
答案 0 :(得分:0)
我检查了PC中的“自动类型获取”缓存,该缓存为C:\Users\<username>\AppData\Local\Microsoft\TypeScript\3.8\
直接原因似乎是C:\Users\<username>\AppData\Local\Microsoft\TypeScript\3.8\node_modules\types-registry\index.json
中缺少一个条目。这是一个约560KB的JSON文件,其中包含@types
范围内各种NPM软件包的最新版本号。
由于某种原因,即使NPM上存在vue
包,该JSON文件也不包含@types/vue
的条目。奇怪的是,它确实包含一些依赖Vue的软件包的条目,例如vue-markdown
和vue-ls
。
当我将"vue-ls"
添加到jsconfig.json
时:
{
"compilerOptions": {
"checkJs": true
},
"typeAcquisition": {
"include": [
"jquery",
"react",
"vue-ls"
]
}
}
... TypeScript已将@types/vue-ls
下载到其缓存中。这会引入vue
包中的类型定义,这使得对Vue.js进行类型检查。