不能重新声明块范围的变量' jQuery'

时间:2018-03-20 22:18:21

标签: typescript visual-studio-code

问题

如何阻止 VS Code declare var jQuery:any;显示为错误?

更多信息

vs code cannot redeclare block-scoped variable 'jQuery'

我做了什么

快速搜索后,我发现了一个建议this,这表明jQuery变量已在同一代码块的其他位置定义。所以我删除了这个引用。 VS Code 停止投诉,但控制台显示以下错误,我的应用无法编译。

  

src / app / app.config.ts(34,25)中的错误:错误TS2304:找不到名称' jQuery'。   src / app / pages / pages.component.ts(31,27):错误TS2304:找不到名称' jQuery'。

所以我重新添加我刚删除的行,我的应用程序符合,但我在浏览器中得到以下错误(在开发工具控制台中)

ERROR Error: Uncaught (in promise): TypeError: __webpack_require__.e is not a function
TypeError: __webpack_require__.e is not a function
    at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:13), <anonymous>:11:29)
    at SystemJsNgModuleLoader.loadAndCompile (core.js:6554)
    at SystemJsNgModuleLoader.load (core.js:6538)
    at RouterConfigLoader.loadModuleFactory (router.js:4543)
    at RouterConfigLoader.load (router.js:4523)
    at MergeMapSubscriber.eval [as project] (router.js:2015)
    at MergeMapSubscriber._tryNext (mergeMap.js:128)
    at MergeMapSubscriber._next (mergeMap.js:118)
    at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
    at ScalarObservable._subscribe (ScalarObservable.js:51)
    at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:13), <anonymous>:11:29)
    at SystemJsNgModuleLoader.loadAndCompile (core.js:6554)
    at SystemJsNgModuleLoader.load (core.js:6538)
    at RouterConfigLoader.loadModuleFactory (router.js:4543)
    at RouterConfigLoader.load (router.js:4523)
    at MergeMapSubscriber.eval [as project] (router.js:2015)
    at MergeMapSubscriber._tryNext (mergeMap.js:128)
    at MergeMapSubscriber._next (mergeMap.js:118)
    at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
    at ScalarObservable._subscribe (ScalarObservable.js:51)
    at resolvePromise (zone.js:809)
    at resolvePromise (zone.js:775)
    at eval (zone.js:858)
    at ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:4736)
    at ZoneDelegate.invokeTask (zone.js:420)
    at Zone.runTask (zone.js:188)
    at drainMicroTaskQueue (zone.js:595)
    at <anonymous>

所以我终止了应用程序并重新启动它。现在应用程序运行时没有错误,但 VS Code 再次显示同样的问题。

tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

2 个答案:

答案 0 :(得分:1)

我认为你有两个问题。

第一个是声明jQuery(你已经在使用 @ types / jquery 了,对吧?)。 VS Code可能已经正确宣布了。所以删除它。

第二个问题是你的某些组件在运行webpack时找不到jQuery,对吗?

我建议你在 webpack 配置中使用ProvidePlugin:

//=============================================
// Provide PLUGIN - making things available
//=============================================
const provideVars = new webpack.ProvidePlugin({
    $: "jquery",
    jQuery: "jquery",
    'window.jQuery': 'jquery'
}); 

module.exports = {
  ...
  plugins: [
    provideVars
  ],
  ...

};

答案 1 :(得分:0)

可能会在以下步骤下解决您的问题。 让我知道你的意见。

1。)从npm

安装jquery类型和jquery
npm install jquery
npm install @types/jquery

2。)将jquery添加到.angular-cli.json

      "scripts": [
        "../node_modules/jquery/dist/jquery.min.js",
      ],

3。)在pages.component.ts文件中声明。

declare let $: any;
declare let jQuery: any;