error TS2384: Overload signatures must all be ambient or non-ambient

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

I'm trying to configure a new webpack + angular2 project and I'm getting some errors:

When I use "npm start", I got a lot of errors like this:

ERROR in ./~/reflect-metadata/Reflect.ts (953,21): error TS2384: Overload signatures must all be ambient or non-ambient.  ERROR in ./~/reflect-metadata/Reflect.ts (985,21): error TS2384: Overload signatures must all be ambient or non-ambient.  ERROR in ./~/reflect-metadata/Reflect.ts (1021,21): error TS2384: Overload signatures must all be ambient or non-ambient.  ERROR in /home/gchiara/desenvolvimento/honda/typings/globals/node/index.d.ts (2301,5): error TS2309: An export assignment cannot be used in a module with other exported elements. 

Here is my code:

package.json

{   "name": "app",   "version": "1.0.0",   "description": "app",   "main": "index.js",   "scripts": {     "test": "echo \"Error: no test specified\" && exit 1",     "typings": "typings",     "start": "webpack-dev-server --inline --progress --port 3000"   },   "author": "",   "license": "ISC",   "dependencies": {     "@angular/common": "2.0.0-rc.4",     "@angular/compiler": "2.0.0-rc.4",     "@angular/core": "2.0.0-rc.4",     "@angular/forms": "0.2.0",     "@angular/http": "2.0.0-rc.4",     "@angular/platform-browser": "2.0.0-rc.4",     "@angular/platform-browser-dynamic": "2.0.0-rc.4",     "@angular/router": "3.0.0-beta.1",     "@angular/router-deprecated": "2.0.0-rc.2",     "@angular/upgrade": "2.0.0-rc.4",     "angular2-in-memory-web-api": "0.0.14",     "angular2-template-loader": "^0.4.0",     "core-js": "^2.4.1",     "html-loader": "^0.4.3",     "html-webpack-plugin": "^2.22.0",     "reflect-metadata": "^0.1.3",     "rxjs": "^5.0.0-beta.6",     "ts-loader": "^0.8.2",     "typescript": "^1.8.10",     "typings": "^1.3.2",     "webpack": "^1.13.1",     "webpack-dev-middleware": "^1.6.1",     "webpack-dev-server": "^1.14.1",     "webpack-merge": "^0.14.1",     "zone.js": "^0.6.12"   },   "devDependencies": {     "concurrently": "^2.0.0"   } }

webpack.config.js

var webpack = require('webpack'); var HtmlWebpackPlugin = require('html-webpack-plugin');  module.exports = {    entry: {     'polyfills': './src/polyfills.ts',     'vendor': './src/vendor.ts',     'app': './src/app.ts'   },    output: {     filename: '[name].js'   },    resolve: {     extensions: ['', '.js', '.ts']   },    module: {     loaders: [       {         test: /\.ts$/,         loaders: ['ts', 'angular2-template-loader']       },       {         test: /\.html$/,         loader: 'html'       },     ]   },    plugins: [      new webpack.optimize.CommonsChunkPlugin({       name: ['app', 'vendor', 'polyfills']     }),      new HtmlWebpackPlugin({       template: './src/index.html'     })   ],    devServer: {     historyApiFallback: true,     stats: 'minimal'   }    }

polyfills.ts

import 'core-js/es6'; import 'reflect-metadata';  require('zone.js/dist/zone');   if (process.env.ENV === 'production') {   // Production } else {   // Development   Error['stackTraceLimit'] = Infinity;   require('zone.js/dist/long-stack-trace-zone'); }

vendor.ts

// Angular 2 import '@angular/platform-browser'; import '@angular/platform-browser-dynamic'; import '@angular/core'; import '@angular/common'; import '@angular/http'; import '@angular/router';  import 'rxjs';

app.ts

import { bootstrap } from '@angular/platform-browser-dynamic'; import { enableProdMode } from '@angular/core'; import { AppComponent } from './app/app.component';  if (process.env.ENV === 'production') {   enableProdMode(); }  bootstrap(AppComponent, []);

app.component.ts

import { Component } from '@angular/core';  @Component({   selector: 'app',   templateUrl: './app.component.html' })  export class AppComponent {    }

The application run normally, but I got tons of errors in console. Does anyone knows why?

Thanks!

回答1:

This occurs because of reflect-metadata@0.1.4.

Downgrade to reflect-metadata@0.1.3 to avoid these errors for the moment!



回答2:

This happens because of dynamic requires in your code I think. The way to get around it is to use the ContextREplacementPlugin. At least if you are using webpack 1.x. Maybe webpack2 does this for you.

new webpack.ContextReplacementPlugin(/reflect/, /^$/)



回答3:

Upgrading to webpack2 solves the issue.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!