【发布时间】:2018-08-19 17:31:53
【问题描述】:
我正在使用 typescript、node 和 electron 构建一个应用程序。
我在应用程序中使用 jquery,并且我已经安装了 @types/jquery 包以获得智能提示。
接下来我使用 mocha 和 spectron 创建了一个测试。 Spectron 使用 webdriverio 并通过一些属性公开其 API。我需要使用这些属性,所以我安装了@types/webdriverio 以获得智能提示。
现在,每当我运行 tsc 工具编译项目时,都会出现以下错误:
node_modules/@types/jquery/index.d.ts(36,15): error TS2451: Cannot redeclare block-scoped variable '$'.
node_modules/@types/webdriverio/index.d.ts(1898,18): error TS2451: Cannot redeclare block-scoped variable '$'.
node_modules/@types/webdriverio/index.d.ts(1899,18): error TS2451: Cannot redeclare block-scoped variable '$'.
问题是两个包都声明了一个全局 $ 变量。您也可以在“全局值”下的 npm 页面中验证它:
https://www.npmjs.com/package/@types/jquery
https://www.npmjs.com/package/@types/webdriverio
我不明白为什么 tsc 试图将它们编译在一起,因为我没有在同一个 .ts 文件中使用 jquery 和 webdriverio?
另外,即使我注释掉了测试,所以我没有在任何地方引用 webdriverio,当我运行 tsc 时,我得到了同样的错误。可能 tsc 正在将 node_modules/@types 中的所有源代码一起编译。事实上,如果我删除 node_modules/@types/webdriverio 文件夹并再次运行 tsc,我不会收到任何错误(当然,只要我保留测试代码的注释即可)。
这是我的 tsconfig.json,它位于项目的根目录中:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"sourceMap": false,
"inlineSourceMap": true,
"inlineSources": true,
"declaration": false,
"outDir": "dist"
},
"include": [
"src/**/*"
]
}
我所有的源代码都在 src 目录中。测试在 src/test 中。
我可以进行任何配置以在编译时将 webdriverio 和 jquery 类型分开吗?另外,我看到一些用js编写的代码示例,它们一起使用:这在打字稿中不可行吗?
【问题讨论】:
标签: jquery node.js typescript webdriver-io