gpt4 book ai didi

typescript - 使用没有 DOM 类型的 TypeScript(用于节点)

转载 作者:行者123 更新时间:2023-12-04 11:54:16 24 4
gpt4 key购买 nike

我在尝试编译没有 DOM 类型的 TypeScript Node 项目时遇到了一个问题,但 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假设排除它们(省略号是我自己的):
node_modules/@types/webgl2/index.d.ts:582:13 - error TS2403: Subsequent variable declarations must have the same type.  Variable 'WebGL2RenderingContext' must be of type (...), but here has type (...).

582 declare var WebGL2RenderingContext: {
~~~~~~~~~~~~~~~~~~~~~~

C:/Users/username/AppData/Roaming/npm/node_modules/typescript/lib/lib.dom.d.ts:16316:13
16316 declare var WebGL2RenderingContext: {
~~~~~~~~~~~~~~~~~~~~~~
'WebGL2RenderingContext' was also declared here.
WebGL2RenderingContext的两个定义如何如果我在 tsconfig 中排除 DOM 类型会发生冲突?

最佳答案

我们遇到了同样的问题。虽然在您的情况下可能是不同的罪魁祸首,但您可以通过以下方式缩小范围:
创建一个空项目,带上你的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 的问题是它包含 triple slash directive :
/// <reference lib="dom" />
这似乎具有 lib.dom.d.ts的效果被包含在编译中,有效地覆盖了 "lib": ["ES6"]你有你的 tsconfig.json .
也许您还可以通过在依赖项中专门查找该行来更快地找到罪魁祸首。
尽管如何处理这个问题,我仍然没有一个好的答案。显然,安装依赖项不应导致让编译静默传递在非浏览器上下文中应该是编译错误的情况。我开通了 issue在 TypeScript 存储库上查看是否可以修复此问题,还有另一个 issue已开通 @types/superagent .

关于typescript - 使用没有 DOM 类型的 TypeScript(用于节点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63109147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com