解决 VS 2017 中的“节点定义冲突”TS4090 错误

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

我有一个可以构建和运行的 TypeScript 项目,但我有大量构建错误,这些错误似乎都源于一个错误:

TS4090:(TS)在“C:/[projectpath]/node_modules/@types/node/index.d.ts”和“C:/[Microsoft 用户路径]/Typescript/3.1”中发现“node”定义冲突/node_modules/@types/node/index.d.ts'。考虑安装该库的特定版本来解决冲突。

我不明白有关“安装此库的特定版本”的内容。我不确定为什么一开始会发现两个版本。

我的应用程序有一个

tsconfig.json
文件位于
ClientApp
文件夹中。它包含以下内容:

{
  "compileOnSave": false,
  "compilerOptions": {
    "module": "esnext",
    "skipLibCheck": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "target": "es2015",
    "lib": [
        "es2016",
        "es2017",
      "dom"
    ],
    "moduleResolution": "node",
    "allowJs": true,
    "baseUrl": "src"
  },
  "include": [
    "./src/**/*.ts",
    "./test/**/*.ts",
    "./custom_typings/**/*.d.ts"
  ],
    "atom": {
        "rewriteTsconfig": false
    },
    "typeAcquisition": {"enable": false}
}

我最近根据与此相关的其他帖子的评论添加了

typeAcquisition
——但没有任何影响。

我需要做什么才能“安装此库的特定版本”?

环境

该项目的目标是.NetCore 2.2。该项目包含提供后端数据的 WebAPI 控制器以及包含使用 Aurelia 创建的 SPA UI 的 ClientApp 文件夹。我使用 WebPack 构建 SPA 应用程序。

错误

typescript visual-studio-2017 aurelia
7个回答
15
投票

我通过移动解决了这个问题

"@types/node": "^10.11.6"

devDependencies
到我的
peerDependencies
文件中的
package.json

"peerDependencies": {
    "@types/node": "^10.11.6"
  },

12
投票

对我来说,我通过编译器选项(tsconfig.json)中的change/add“typeRoots”修复了它

"compilerOptions": {
        ....
         "typeRoots": [
            "node_modules/@types"
        ]
        ....
}

0
投票

对我来说,是

karma.config
文件导致了问题。

删除

package.json
中的一些类型后,我设法减少了错误数量,并且只有一个 - 在
signalr
karma
之间。

出于某种原因,我有一个

.js
,而不是
.ts
业力配置。
当我切换到正确的配置并重新启动VS后,问题就解决了。

它需要某种版本的 node,因为使用了

require
函数。
我的理论是,Visual Studio 自动包含可访问版本的 node 的类型,作为 JavaScript linting 功能的一部分。
但是,在编译打字稿之后,包含了 node 的另一个版本的类型 - 与已经存在的类型冲突。

tsconfig.json
文件中的任何操作都无法解决该问题,因为 TS 的 node 类型和 JS 的 node 类型之间存在冲突。


0
投票

在我的例子中,包electronnode-opcua使用不同的@types/node版本,导致“TS4090:(TS)'node的定义冲突”错误。

我已经通过在我的

peerDependency
中手动提供 @types/node 的版本成功修复了该错误,正如错误中指出的那样,但是在其他地方安装项目后,此版本发生了变化,结果证明这是一个坏主意。所以我在我的
package.json
中添加了
npm dedupe
作为 posinstall 脚本,并且它工作正常。
正如文档所述,它浏览整个依赖关系树,并通过将重复的包移动到树上来删除它们。


0
投票

如果您在 2 个不同的文件中导入 mongoose,请确保使用相同的导入,例如。使用

const mongoose = require("mongoose");

在两个文件中


0
投票

发布它以防对某人有帮助:

对我来说,这个错误是人为错误。

我忘记删除/注释掉我的

typeRoots: []
中的
tsconfig.json
,因此从文件中删除这一行解决了我的问题


-1
投票

解决了这个问题

rm -rf node_modules
rm package-lock.json
npm i
© www.soinside.com 2019 - 2024. All rights reserved.