为什么VS Code无法获取Vue的类型?

时间:2020-06-08 03:58:30

标签: vue.js visual-studio-code

我有一个仅包含三个文件的项目目录:

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的类型检查器报告三个错误:

Errors for jQuery, React, Vue

现在,我修改了jsconfig.json,以便VS Code可以自动获取所有三个类型:

{
  "compilerOptions": {
    "checkJs": true
  },
  "typeAcquisition": {
    "include": [
      "jquery",
      "react",
      "vue"
    ]
  }
}

...这使VS Code可以识别jQuery和React可以在我的脚本中使用。但是,正如您在此处看到的那样,它仍然无法识别Vue:

Error for Vue only

TLDR:为什么VS Code不能为React和jQuery获取Vue的类型定义?

(注意:这不是Node.js项目。我的项目目录下没有package.jsonnode_modules/。我还检查了全局安装的npm软件包,只是为了可以,但是我没有安装reactjquery。)

1 个答案:

答案 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-markdownvue-ls

当我将"vue-ls"添加到jsconfig.json时:

{
  "compilerOptions": {
    "checkJs": true
  },
  "typeAcquisition": {
    "include": [
      "jquery",
      "react",
      "vue-ls"
    ]
  }
}

... TypeScript已将@types/vue-ls下载到其缓存中。这会引入vue包中的类型定义,这使得对Vue.js进行类型检查。