默认情况下,在VSCode中编辑JavaScript文件时,它将假定当前上下文中存在fetch函数和相关类型.这对于设计为在浏览器中运行的JavaScript来说是有意义的,但是当在node.js上运行时,除非通过node-fetch安装,否则fetch函数是不存在的.我发现在这种情况下,VSCode具有误导性,因为当您try 调用fetch函数或访问其他类型(如RequestResponse)时,它不会突出显示错误,即使它们不存在,除非您安装了node-fetch.

我如何配置vscode以假定node.js上下文,并因此假定fetch不存在,除非我显式地从node-fetch导入它?

推荐答案

为什么默认情况下会出现Web类型

tsconfig.json compilerOptions.lib美元的文档中:

TypeScrip包括内置JSAPI的默认类型定义集(如Math),102.

如何更改默认设置

创建tsconfig.jsonjsconfig.json,并将compilerOptions.lib数组设置为包含"DOM"的not,这意味着不会假定lib.dom.d.ts(类型脚本附带的"DOM标准库"类型定义文件).您应该指定要用哪种ECMA脚本标准来编写源代码.

配置文件还包含用于控制它对哪些文件生效的字段:filesincludeexclude.如果都不指定,则为include will default to **,这将以递归方式匹配配置文件旁边的子目录下的所有内容.

如果您只想编写一个JS文件(即.现在,您只有一个源文件的整个配置文件!).我不知道对于这样的用例,是否有更方便的替代方案.如果有人知道,请编辑此答案.

  • 我短暂地研究了TypeScript triple-slash directives,它允许在每个文件的基础上指定内容,但我认为您只能指定add项(即.我不认为你可以用它们来移除一个lib).
  • 在 compose 本文时,有一些VS代码设置可以应用于用户设置范围,这些设置会影响隐式项目(没有项目配置文件的JS/TS文件)的设置(js/ts.implicitProjectConfig.*),但没有一个是用于设置compileOptions.lib字段的,我的直觉告诉我这可能不会发生(但不要引用我的话).

您可能还需要Node API的类型

使用NPM安装@types/node的版本.确保您安装的版本的主版本号与您希望在其上运行脚本的Node JS版本的主版本号匹配.

与这个问题无关的有趣的事实

继续关于VS Code针对隐式项目的用户设置这一点,如果没有检测到项目,VS Code会使一些默认设置生效(在那些类型脚本本身所做的之上).您可以通过执行"Find in Files"来查看代码,使用extensions/typescript-language-features/**/*作为"Files to Include"字段,使用compilerOptions作为Find查询.在这种情况下,compilerOptions.libnot似乎是VS Code触及的东西.

Node.js相关问答推荐

Spotify Auth访问令牌给出错误代码400

容器端口是容器内 node 应用程序的端口吗?

聚合操作不返回任何具有mongoose模式的内容

如何修复node.js中的错误代码无法加载资源:服务器响应状态为403(禁止)

Nodejs 从链接数组中获取数据并保存到 mongodb

如何修改这个flake.nix,这样我就不用每次加载环境都加载nix包了

为什么我的 Cypress Post 请求的请求正文是空的?

获取用户 ID 后,Firebase 函数 onCreate 方法在 Firestore 上不起作用

如何让 vscode 假设一个 node.js 上下文,以便它不假设 `fetch` 存在?

表达限制资源属于特定用户的优雅方式

响应发送 200 而不是 403

如何使用 superagent/supertest 链接 http 调用?

使用加密模块的流功能获取文件的哈希(即:没有 hash.update 和 hash.digest)

node_modules 中 .bin 文件夹的用途是什么?

如何使用 UglifyJS 缩小文件夹中的多个 Javascript 文件?

遍历 NodeJS 中的一系列日期

使用 Monit 而不是基本的 Upstart 设置有什么好处?

node.js 服务器和 HTTP/2 (2.0) 与 express.js

为什么 Node.js 没有原生 DOM?

使用 Node-sass 缩小 CSS