Protractor: TS2440:导入声明与“PluginConfig”的本地声明冲突。

创建于 2019-11-06  ·  27评论  ·  资料来源: angular/protractor

你好,先生!

错误报告
我收到以下错误:

[at-loader] 中的错误 ./node_modules/protractor/built/index.d.ts:5:10
TS2440:导入声明与“PluginConfig”的本地声明冲突。

[at-loader] 中的错误 ./node_modules/protractor/built/index.d.ts:5:24
TS2440:导入声明与“ProtractorPlugin”的本地声明冲突。

  • 节点版本: 10.5.0
  • 量角器版本: ~5.1.2
  • 角度版本: ^4.2.4
  • 浏览器: any
  • 操作系统和版本Windows 10
  • 您的量角器配置文件

const { SpecReporter } = require('jasmine-spec-reporter');

出口.config = {
allScriptsTimeout: 11000,
眼镜: [
'./e2e/ */ .e2e-spec.ts'
],
能力:{
'浏览器名称':'铬'
},
直接连接:真,
baseUrl: ' http://localhost :4200/',
框架:“茉莉花”,
茉莉花节点选项:{
显示颜色:真实,
默认超时间隔:30000,
打印:函数(){}
},
准备(){
require('ts-node').register({
项目:'e2e/tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};

  • 重现错误的步骤 - npm run build 失败

功能要求
请帮我解决

最有用的评论

可能不是每个人的最佳解决方案,但您应该能够通过在 tsconfig.json 中添加以下内容来解决此问题:

"skipLibCheck": true

所有27条评论

截至今天,我遇到了同样的问题(使用 Protractor 5.4.2 和 Angular 8)

Protractor 5.4.2 和 Angular 8 也有同样的问题

我今天在升级我们的 Typescript 版本时遇到了这个问题。 我们在 AngularJS 上,它发生在 Protractor 5.4.1 和 5.4.2 上。 我在 Typescript 3.6.4 (3.6.x) 上没有收到错误消息,但我在 Typescript 3.7.2 (3.7.x) 上收到了错误消息。 我相信这与这个重大变化有关: https :

请修复; 我们需要无效合并! :)

同样的问题在这里。 我的项目是 Protractor 5.4.2,我们想迁移到 TypeScript 3.7 。

向后移植修复程序会很棒(它肯定有效):
89fbf75d4103db2cd20fd0c1c4ca7efebc52c049
37bef24331c1012bfc2cc7d3fa259a00e69bd192
从大师到 5.4.2

5.4.2 是 npmjs.com 上可用的最新版本。
6.0.0 包含重大更改,因此对我的项目不利。
( https://github.com/angular/protractor/blob/6.0.0/CHANGELOG.md )

抄送: @sandersn @heathkit

重复 #5325

编辑:我应该澄清一下,我在 Typescript 团队工作,而不是在 Angular 团队工作。 我和一些团队成员交谈过,他们说他们会尝试发布一个新的 5.* 版本,但我相信这个过程并不简单。

今天我已经将打字稿版本从 3.7.x 降级到 3.6.x.,它工作正常。 谢谢马特凯西

感谢您澄清@sandersn; 那将是我的下一个问题。 我们不依赖流量控制,我尝试更新到 6.0.0,但即使是已发布的软件包似乎也没有您的修复程序。 如果团队中的某个人可以在这里发表评论,那就太好了:我们是在谈论几天、几个月还是更长时间?

编辑:我愿意提供帮助,但似乎在发布新版本时“只是”受阻:)

编辑 2:由于我们系统的其余部分已转移到 TS 3.7,对我来说,两害相权取其轻的是通过链接到我们的 tsconfig 中的自定义 .d.ts 文件来覆盖量角器中的类型: https:// www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping

@mattcasey你能更详细地描述一下你当前的修复是如何工作的吗? 只是一个带有正确导出路径的复制的 index.d.ts 文件,然后使用路径映射将量角器映射到新文件?

更新类型/节点依赖
npm install -g @types/node@8

确保类型/节点在 devDependencies 和依赖项中列出

"dependencies": { ... "@types/node": "^8.10.59", ... }, "devDependencies": { ... "@types/node": "^8.10.59", ... }

如果使用 typescript 3.7.2 的任何模块发生这种情况,您可以使用“as”语句。

import { module as otherModuleName } from "./module"

或者您可以将模块导出为默认值,以便您可以使用不同的变量名称

今天我已经将打字稿版本从 3.7.x 降级到 3.6.x.,它工作正常。 谢谢马特凯西

它把 "typescript": "~3.6" 放到 package.json 文件中,然后在终端上运行 "npm install",它对我有用。 谢谢!

同样的问题,当我降级到 3.6.4 时它起作用了。

同样的问题,我不得不npm uninstall -g typescript以便本地版本的tsc优先。 我本可以用PATH来代替...

@woppa684我的修复本质上是为 Protractor 创建我自己的类型,并告诉 Typescript 忽略 node_modules 内部的类型。 我的protractor.d.ts (位于我的项目test-e2e/protractor.d.ts )文件如下所示:

// Note: This stub exists to override Protractor types which are incompatible with TS 3.7 as of 5.4.2 and 6.0.0
declare module 'protractor' {
    let browser: any;
    let element: any;
    let by: any;
    let ExpectedConditions: any;
    let until: any;
    let Key: any;
}

然后在 tsconfig 中:

{
  ...
  "compilerOptions": {
    ...
    "paths": {
      "protractor": ["test-e2e/protractor.d.ts"]
    }
  }
}

这使我可以使用 Typescript 3.7,但缺点是量角器方法不再是类型安全的。

我们使用的另一种解决方案是使用https://github.com/angular/protractor/pull/5326/ 中的修复程序创建量角器的修改版本

我们暂时用它代替量角器

// package.json
"protractor": "tomyam1/protractor-ts3.7-fix"

我在使用 Angular 的 devops 上遇到了这个问题。 这才刚刚开始发生。 我回去拿了一个 package.json 和 package-lock.json 从我知道它起作用的时候开始。
我升级了 Angular。 我尝试了几种不同的打字稿版本。 它适用于我的本地计算机,但不适用于 devops。 只有 vs 构建部分失败了。 npm/ng 的东西运行得很好。
一切都完全在我的系统上运行。
https://developercommunity.visualstudio.com/content/problem/855096/npm-ng-suddenly-not-working-conflict-pluginconfig.html

如果使用 typescript 3.7.2 的任何模块发生这种情况,您可以使用“as”语句。

import { module as otherModuleName } from "./module"

或者您可以将模块导出为默认值,以便您可以使用不同的变量名称

@anicarrr ,您能否为您提供的第二个答案提供一个示例?

可能不是每个人的最佳解决方案,但您应该能够通过在 tsconfig.json 中添加以下内容来解决此问题:

"skipLibCheck": true

如果使用 typescript 3.7.2 的任何模块发生这种情况,您可以使用“as”语句。
import { module as otherModuleName } from "./module"
或者您可以将模块导出为默认值,以便您可以使用不同的变量名称

@anicarrr ,您能否为您提供的第二个答案提供一个示例?

我的意思是像这样导出:

export default myModule

因此,当您导入它时,您可以使用任何您想要的名称,例如:

import whateverName from myModule

仅供参考:同时使用 tsc 编译器选项"skipLibCheck": true对于受此问题影响的人来说应该是一个足够的解决方法。

你好,先生!

错误报告
我收到以下错误:

[at-loader] 中的错误 ./node_modules/protractor/built/index.d.ts:5:10
TS2440:导入声明与“PluginConfig”的本地声明冲突。

[at-loader] 中的错误 ./node_modules/protractor/built/index.d.ts:5:24
TS2440:导入声明与“ProtractorPlugin”的本地声明冲突。

  • 节点版本: 10.5.0
  • 量角器版本: ~5.1.2
  • 角度版本: ^4.2.4
  • 浏览器: any
  • 操作系统和版本Windows 10
  • 您的量角器配置文件

const { SpecReporter } = require('jasmine-spec-reporter');

出口.config = {
allScriptsTimeout: 11000,
眼镜: [
'./e2e/ */ .e2e-spec.ts'
],
能力:{
'浏览器名称':'铬'
},
直接连接:真,
baseUrl: ' http://localhost :4200/',
框架:“茉莉花”,
茉莉花节点选项:{
显示颜色:真实,
默认超时间隔:30000,
打印:函数(){}
},
准备(){
require('ts-node').register({
项目:'e2e/tsconfig.e2e.json'
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};

  • 重现错误的步骤 - npm run build 失败

功能要求
请帮我解决

嗨,SachinBN,

您需要更改项目中安装的 Typescript 版本。 在 VS Code 终端中使用以下命令来更改版本(不带引号)。

“npm install -g [email protected]

完成后,请使用以下命令在 VS Code 上检查项目中的打字稿版本

“tsc -v”

它应该显示 3.6.2。 请在 package.json 文件中使用相同的版本。 一旦版本更改为 3.6.2 再次执行“tsc”,错误应该消失了。

希望这可以帮助。

问候,

阿美亚

我在我的 angular 应用程序中遇到了这个问题,我能够通过删除由建议自动添加的量角器导入语句来解决它。

喜欢:

从“量角器”导入{元素}
从“量角器”导入{承诺}

只需删除它们,我就会按预期运行。
我的工作,我希望你的代码工作。

问候,
尼希特·津祖瓦迪亚

npx tsc -v
Version 3.8.3

最新节点和 NPM。

我的档案

import * as mysql from "mysql2";

const config =
    process.env.NODE_ENV == "prod"
        ? {
            connectionLimit: 10,
            host: "*********.rds.amazonaws.com",
            user: "admin",
            database: "p_" + process.env.PROJECT_ID,
            password: "*********",
            prefix: `p_${process.env.PROJECT_ID}_`
        }
        : {
            connectionLimit: 10,
            host: "host.docker.internal",
            user: "root",
            database: "i**_project",
            password: "root",
            prefix: ""
        };


export const db = mysql.createPool(config);
export const prefix = config.prefix;

我有同样的错误

npm run start

> [email protected] start /workspaces/icod-prt
> npx tsc && node build/index.js

typings/modules/mysql2/index.d.ts:677:1 - error TS2440: Import declaration conflicts with local declaration of 'Connection'.

677 import Connection = require('~mysql2~mysql/lib/Connection');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:679:1 - error TS2440: Import declaration conflicts with local declaration of 'PoolConnection'.

679 import PoolConnection = require('~mysql2~mysql/lib/PoolConnection');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:680:1 - error TS2440: Import declaration conflicts with local declaration of 'Pool'.

680 import Pool = require('~mysql2~mysql/lib/Pool');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:682:1 - error TS2440: Import declaration conflicts with local declaration of 'PoolCluster'.

682 import PoolCluster = require('~mysql2~mysql/lib/PoolCluster');
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

typings/modules/mysql2/index.d.ts:684:1 - error TS2440: Import declaration conflicts with local declaration of 'Query'.

684 import Query = require('~mysql2~mysql/lib/protocol/sequences/Query');

有时,TypeScript 编译器只是将错误归咎于其他人的吸烟枪。

我今天在处理 .spec.ts 单元测试文件时收到了 OP 的确切错误消息。 因为我不需要 Protractor 进行单元测试,所以我暂时用npm uninstall protractor卸载了它,然后导致 TypeScript 抛出真正的错误:

ERROR in src/app/.../...spec.ts:12:30 - error TS2307: Cannot find module 'protractor'.
12 import { EventEmitter } from 'protractor';

原因是 Visual Studio Code 莫名其妙地创建了这个自动导入语句而不是正常的import { EventEmitter } from '@angular/core';

在 4.0.2 中仍然得到了这个 .. 嗯

我在我的 angular 应用程序中遇到了这个问题,我能够通过删除由建议自动添加的量角器导入语句来解决它。

喜欢:

从“量角器”导入{元素}
从“量角器”导入{承诺}

只需删除它们,我就会按预期运行。
我的工作,我希望你的代码工作。

问候,
尼希特·津祖瓦迪亚

对我来说,这是 VSCode 的自动导入,它从Protractor而不是@angular/core导入了EventEmitter @angular/core 。 解决这个问题为我解决了这个问题。

此页面是否有帮助?
0 / 5 - 0 等级