在nodejs项目VSCode中禁用DOM库类型定义

qua*_*ddy 9 configuration node.js typescript tsconfig visual-studio-code

我想在 Node.js TypeScript 项目中禁用 DOM 类型定义。我已经使用下面代码片段中显示的配置配置了 TypeScript。尽管明确将该"lib"属性设置为["ES2016"],VS Code 仍然建议lib.dom.d.ts自动完成。lib.dom.d.ts该项目似乎从驻留在 VS Code 中的定义文件(特别是~/.vscode/extensions目录,而不是目录)中提取定义。node_modules最终结果似乎是运行时错误。显然 Node.js 对 DOM 库没有用处;是有一些方法可以禁用 DOM 库吗?

使用下面的配置(如上所述)不起作用。

{
  "compilerOptions": {
    "lib": ["ES2016"],
    "target": "es6",
    "module": "commonjs",
    "skipLibCheck": true,
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "allowJs": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "inlineSourceMap": true,
    "importHelpers": true,
    "alwaysStrict": true,
    "strict": true,
    "outDir": "build",
    "forceConsistentCasingInFileNames": true,
    "esModuleInterop": true,
    "typeRoots": ["./node_modules/@types", "./typings"],
    "baseUrl": ".",
    "paths": {
      "#root/*": ["./*"]
    }
  },
  "include": [
    "src/**/*",
    "__tests__/**/*",
    "config/**/*",
    "scripts/bundle-test.ts"
  ],
  "exclude": ["node_modules"]
}
Run Code Online (Sandbox Code Playgroud)

JΛY*_*ÐΞV 8

不可能告诉您如何以指定要排除的库的方式配置项目。这是因为 TypeScript 在其文件中不支持任何此类机制tsconfig.json。要知道如何不包含 DOM,您需要知道如何配置您的项目以使用(而不是使用)ECMAScript 库和标准。

\n

在定义要包含在架构定义tsconfig.json文件中的 ECMAScript 库时,您需要考虑两个设置。

\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 第一个是:"noLib": string[],

\n

\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 和第二个:"lib": string[],

\n
\n
\n

noLib很少是最好的选择

\n
\n

noLib很少需要设置为 true。使用(或设置为 true)时,项目不会自动导入库,许多库您必须导入您想要使用的每个库以及这些库的类型定义。现在,这可以用来定义您想要的所有内容,并忽略您不需要的所有内容,例如 DOM 库。

\n

通常Lib会是更实用的财产

\n

Lib通过定义您希望能够使用的 ECMAScript 库来工作。

\n
\n

“这个问题是特定于 Node.js 的,因此,我会这样回答它”通常,使用 Node.js,您可以设置lib为任何最新版本的ECMA-262 标准(又名 ECMAScript)并且没问题。对于在浏览器中运行的 JavaScript 来说情况并非如此。使用 Node.js,您可以获得一个受控的运行时环境,仅由具有编程经验的人员使用。浏览器,嗯,你得到了各行各业,以及在 VT 终端中执行你的代码的用户(好吧,也许不是真正的 VT,但你明白我的意思)。

\n
\n
tsconfig.json "lib": []下面按年龄顺序列出了您可以指定为属性值的 ECMAScript 标准(最旧的 --> 最新的)。
\n
    \n
  • “ES5”
  • \n
  • “ES6”
  • \n
  • “ES7”,
  • \n
  • “ES2015”
  • \n
  • “ES2016”
  • \n
  • “ES2017”
  • \n
  • “ES2020”
  • \n
  • “ES2019”
  • \n
  • “ES2021”
  • \n
  • “ES下一个”
  • \n
\n
\n

再次附注noLib。

\n

由于我花时间编译了这个列表,我想我也可以将它提供给 noLib。正如我在上面向您透露的,该tsconfig.json属性noLib意味着您不希望任何版本的 ECMA-262 标准包含任何库,并且您自己想要单独定义将包含哪些库(此也意味着你需要提供类型信息(获取类型见下文),下面是你可以一一定义的库。

\n
!请注意:由于超出本答案范围的原因,在某些情况下使用noLibECMA 功能支持来定义项目是不可避免的。您必须煞费苦心地列出每个功能、用于该功能的标准化,并且必须包含并正确配置您添加的每个功能的类型。
\n
lib“当 noLib 设置为true”时,将添加以下库。
\n

使用下面的库是具体说明您使用的库的唯一方法。即使如此,您仍然没有指定不使用什么。所以你不能使用这个方法来专门“NOT USE DOM”。

\n
    \n
  • “ES2015.合集”,
  • \n
  • “ES2015.核心”,
  • \n
  • “ES2015.生成器”,
  • \n
  • “ES2015.Iterable”,
  • \n
  • “ES2015.承诺”,
  • \n
  • “ES2015.代理”,
  • \n
  • “ES2015.反思”,
  • \n
  • "ES2015.Symbol.WellKnown",
  • \n
  • "ES2015.符号",
  • \n
  • “ES2016.Array.Include”,
  • \n
  • “ES2017.Intl”,
  • \n
  • “ES2017.对象”,
  • \n
  • “ES2017.共享内存”,
  • \n
  • “ES2017.字符串”,
  • \n
  • “ES2017.TypedArrays”,
  • \n
  • “ES2018”,
  • \n
  • “ES2018.AsyncGenerator”,
  • \n
  • “ES2018.AsyncIterable”,
  • \n
  • “ES2018.Intl”,
  • \n
  • “ES2018.承诺”,
  • \n
  • “ES2018.Regexp”,
  • \n
  • “ES2019.数组”,
  • \n
  • “ES2019.对象”,
  • \n
  • “ES2019.字符串”,
  • \n
  • "ES2019.符号",
  • \n
  • “ES2020.BigInt”,
  • \n
  • “ES2020.承诺”,
  • \n
  • “ES2020.字符串”,
  • \n
  • "ES2020.Symbol.WellKnown",
  • \n
  • “ESNext.Array”,
  • \n
  • “ESNext.AsyncIterable”,
  • \n
  • “ESNext.BigInt”,
  • \n
  • “ESNext.Intl”,
  • \n
  • “ESNext.Promise”,
  • \n
  • “ESNext.String”,
  • \n
  • "ESNext.Symbol",
  • \n
  • “DOM”,
  • \n
  • “DOM.可迭代”,
  • \n
  • “脚本主机”,
  • \n
  • “网络工作者”,
  • \n
  • “WebWorker.ImportScripts”,
  • \n
  • “Webworker.Iterable”,
  • \n
  • “ES2020.共享内存”,
  • \n
  • “ES2020.Intl”,
  • \n
  • “ES2021.承诺”,
  • \n
  • “ES2021.字符串”,
  • \n
  • “ES2021.WeakRef”,
  • \n
  • “ESNext.WeakRef”,
  • \n
  • “es2021.intl”
  • \n
\n
\n
\n
\n
可以找到库类型@
\n
    \n
  1. TypeScriptLang 的类型搜索应用程序- 易于使用的应用程序
  2. \n
  3. NPM 通过搜索类型- 它的 NPM...
  4. \n
  5. 明确类型的 GitHub 存储库这不像其他两个选项那么容易导航,但它省去了中间人。这是 NPM 和 TypeScriptLang 应用程序获取大部分类型的地方。
  6. \n
\n
\n
\n
\n

  • 这正是我一直在寻找的。 (2认同)