如何让 vscode 假设一个 node.js 上下文,这样它就不会假设 DOM API 可用?

问题描述 投票:0回答:1

默认情况下,在 VS Code 中编辑 JavaScript 文件时,它会假设当前上下文中存在

fetch
函数和相关类型。这对于设计在浏览器中运行的 JavaScript 来说是有意义的,但在 Node.js 上运行时,除非通过
fetch
安装,否则
node-fetch
函数不存在。我发现在这种情况下,VS Code 具有误导性,因为当您尝试调用
fetch
函数或访问其他类型(例如
Request
Response
)时,它不会突出显示错误,即使它们不存在,除非您已安装
node-fetch

如何配置 VS Code 来假设 node.js 上下文,从而假设

fetch
不存在,除非我显式从
node-fetch
导入它?

node.js visual-studio-code dom
1个回答
2
投票

为什么默认存在网页类型

来自

tsconfig.json compilerOptions.lib
的文档:

TypeScript 包含内置 JS API 的一组默认类型定义(如

Math
),以及浏览器环境中找到的内容的类型定义(如
document

如何更改默认值

创建tsconfig.jsonjsconfig.json,并将

compilerOptions.lib
数组设置为not包含“DOM”,这意味着lib.dom.d.ts(“DOM标准”)不会假定 TypeScript 附带的“库”类型定义文件。您应该指定要在哪个 ECMA 脚本标准中编写源代码。

配置文件还具有控制其对哪些文件生效的字段:

files
include
exclude
。如果您未指定其中任何一个,
include
将默认为
**
,它会匹配配置文件旁边的子目录旁边和递归下的所有内容。

如果您只想编写一个 JS 文件(即现在您只有一个源文件有一个完整的配置文件!),则必须创建此文件可能会被视为很烦人。我不知道是否有更适合这种用例的替代方案。如果有人知道,请编辑此答案。

  • 我简要研究了 TypeScript 三斜杠指令,它允许在每个文件的基础上指定内容,但我认为你只能 添加 内容(即,我不认为你可以使用它们来删除
     lib
    )。
  • 在撰写本文时,可以在用户设置范围应用 VS Code 设置,这些设置会影响隐式项目(没有项目配置文件的 JS/TS 文件)的设置 (
    js/ts.implicitProjectConfig.*
    ),但它们都不是用于设置
    compileOptions.lib
    字段,我的直觉说这可能不会发生(但不要引用我的话)。

您可能还需要 Node API 的类型

TypeScript 为 Web API 捆绑类型,但不为 NodeJS API 捆绑类型。使用 NPM 安装

@types/node
的版本。确保您安装的版本的主版本号与您想要运行脚本的 NodeJS 版本的主版本号相匹配。

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

继续讨论 VS Code 对隐式项目的用户设置,如果未检测到项目,VS Code 会启用一些默认值(除了 TypeScript 本身所做的设置之外)。您可以通过“在文件中查找”来浏览 github.dev/microsoft/vscode 上的代码,使用

extensions/typescript-language-features/**/*
作为“要包含的文件”字段,使用
compilerOptions
作为查找查询。
compilerOptions.lib
似乎不是 是 VS Code 在这种情况下涉及的东西。

© www.soinside.com 2019 - 2024. All rights reserved.