使用不带DOM类型的TypeScript(用于节点)

使用不带DOM类型的TypeScript(用于节点),typescript,Typescript,我遇到了一个问题,我试图编译一个没有DOM类型的TypeScript节点项目,但是TypeScript一直包含DOM类型。这是我的tsconfig.json: { "compilerOptions": { "lib": [ "ES6" ], "target": "es6", "module&q

我遇到了一个问题,我试图编译一个没有DOM类型的TypeScript节点项目,但是TypeScript一直包含DOM类型。这是我的
tsconfig.json

{
    "compilerOptions": {
        "lib": [
            "ES6"
        ],
        "target": "es6",
        "module": "commonjs",
        
        "declaration": true,
        "outDir": "./dist",
        "rootDir": "./src",
        "strict": true,
        "esModuleInterop": true,
    }
}
如您所见,我使用的是
“lib”:[“ES6”]
,这是为了摆脱DOM类型。使用
tsc--showconfig
我可以验证这是我正在使用的配置。但是,VSCode的IntelliSense允许我写出HTML元素的类型,并且在编译时,我遇到一个错误,特别是在
lib.dom.d.ts
中谈论与类型的冲突,即使假定
tsconfig
会排除它们(省略号是我自己的):

如果我在我的
tsconfig
中排除DOM类型,那么
WebGL2RenderingContext
的两个定义如何冲突

使用不带DOM类型的TypeScript(用于节点)

您的tsconfig是正确的方法。i、 e

   "lib": [
        "ES6"
    ],
为什么会出现错误
您的工作区中很可能有另一个tsconfig.json被vscode拾取。

我们遇到了相同的问题。在您的案例中,它可能是另一个罪魁祸首,但以下是如何缩小范围:

创建一个空项目,使用
tsconfig.json
并使用一个最小的代码段,该代码段仅在
lib.dom.d.ts
处于以下范围时有效:

// This works in a browser, but should fail to compile for nodejs, because in
// nodejs, and explicit import is needed.
const time = performance.now();
如果编译失败,您就知道您的
tsconfig.json
总体上是好的

现在慢慢地引入第三部分依赖项,即,开始npm逐个安装“坏”项目中的依赖项,直到编译突然通过为止

在我们的例子中,有问题的依赖关系是
@types/supertest
,这反过来又导致了
@types/superagent
@types/superagent
的问题在于它包含:

//
这似乎会导致编译中包含
lib.dom.d.ts
,有效地覆盖
“lib”:[“ES6”]
中的
tsconfig.json

也许您还可以通过在依赖项中专门查找该行来更快地找到罪魁祸首


尽管如何处理这个问题,我仍然没有一个好的答案。显然,安装依赖项不应导致编译以静默方式传递在非浏览器上下文中应该是编译错误的情况。我已经在TypeScript repo上打开了一个,看看这是否可以修复,还有另一个为
@types/superagent

打开的,我在问题中说,
tsc--showconfig
显示了我正在使用的配置。也就是说,如果是另一个
tsconfig
,则会出现另一个。我在
的“lib”中遇到了相同的问题:[“esnext”]
注意也与此相关。
// This works in a browser, but should fail to compile for nodejs, because in
// nodejs, and explicit import is needed.
const time = performance.now();
/// <reference lib="dom" />