我正在使用打字稿,节点和电子构建应用程序.
我在应用程序中使用jquery,我已经安装了@ types/jquery包以获得intellisense提示.
接下来,我使用mocha和spectron创建了一个测试.Spectron使用webdriverio并通过一些属性公开其API.我需要使用这些属性,所以我安装了@ types/webdriverio以获得intellisense提示.
现在,每当我运行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 '$'.
Run Code Online (Sandbox Code Playgroud)
问题是两个包都声明了一个全局$变量.您也可以在"全局值"下的npm页面中对其进行验证:
https://www.npmjs.com/package/@types/jquery
https://www.npmjs.com/package/@types/webdriverio
我不明白为什么tsc试图将它们编译在一起,因为我没有在同一个.ts文件中使用jquery和webdriverio?
此外,即使我注释掉测试,所以我在任何地方都没有引用webdriverio,当我运行tsc时,我得到了相同的错误.可能tsc正在编译node_modules/@类型中的所有源.事实上,如果我删除node_modules/@ types/webdriverio文件夹并再次运行tsc,我没有错误(当然,只要我保持测试代码注释).
这是我的tsconfig.json,它位于项目的根目录中:
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"sourceMap": false,
"inlineSourceMap": true,
"inlineSources": true,
"declaration": false,
"outDir": "dist"
},
"include": [
"src/**/*"
]
}
Run Code Online (Sandbox Code Playgroud)
我的所有源代码都在src目录中.测试在src/test中.
是否有任何配置可以保持webdriverio和jquery类型在编译时分离?另外,我已经看到一些用js编写的代码示例,它们一起使用:这在typescript中是不可行的吗?