Javascript Angular CLI错误:导出类的公共方法的返回类型具有或正在使用名称';误差可观测';来自外部模块,但无法命名
在构建了一个Angular 2(非cli)应用程序的克隆应用程序之后,我注意到,由于项目是使用Angular cli构建的,所以我的几个文件正在产生错误(同类错误)。我不清楚为什么这些是CLI版本中的错误,而不是其他版本中的错误。这是一个与网页相关的问题吗?或者与Typescript在两个版本之间的处理方式不同有关?为了澄清,最初的应用程序使用SystemJS,Angular CLI版本使用Webpack。当我说我“构建”了这个应用程序时,我的意思是我重新创建了这个克隆版本的原始应用程序中的所有组件、指令、模块、路由等。这是我(在多个文件中)收到的一般错误消息: 错误:导出类的公共方法的返回类型为或 使用外部模块中的名称“ErrorObservable”,但无法命名 下面是一个产生此错误的文件示例:Javascript Angular CLI错误:导出类的公共方法的返回类型具有或正在使用名称';误差可观测';来自外部模块,但无法命名,javascript,angular,typescript,rxjs,angular-cli,Javascript,Angular,Typescript,Rxjs,Angular Cli,在构建了一个Angular 2(非cli)应用程序的克隆应用程序之后,我注意到,由于项目是使用Angular cli构建的,所以我的几个文件正在产生错误(同类错误)。我不清楚为什么这些是CLI版本中的错误,而不是其他版本中的错误。这是一个与网页相关的问题吗?或者与Typescript在两个版本之间的处理方式不同有关?为了澄清,最初的应用程序使用SystemJS,Angular CLI版本使用Webpack。当我说我“构建”了这个应用程序时,我的意思是我重新创建了这个克隆版本的原始应用程序中的所有
import { Observable } from 'rxjs/Observable';
import { Http, Response } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
@Injectable()
export class StreamCountsService {
private _url: string = "https://api.somesite.com"
constructor(private _http: Http) {}
getCount() {
return this._http.get(this._url)
.map((response:Response) => response.json())
.catch(this._errorsHandler);
}
_errorsHandler(error: Response) {
console.error(error);
return Observable.throw(error || "Server Error");
}
}
我的设置:
MacBook Air,OS X El Capitan
Angular CLI版本
运行Angular CLI版本1.0.0-beta.22-1
完整的错误跟踪如下所示(为隐私而略微编辑):
vendor.bundle.js:52455./src/app/data/stream.service.ts模块构建
失败:错误:
/Users/adds/Documents/abc/abc cli/cli abc/src/app/data/stream-assign.service.ts
(20,5):导出类的公共方法的返回类型具有或为
使用来自外部模块的名称“ErrorObservable”
“/Users/adds/Documents/abc/abc cli/cli abc/node_modules/rxjs/observable/ErrorObservable”
但无法命名。)在
(/Users/adds/Documents/abc/abc cli/cli abc/node_modules/@ngtools/webpack/src/loader.js:115:15)
在
/Users/adds/Documents/abc/abc cli/cli abc/node_modules/@ngtools/webpack/src/loader.js:140:17
@./src/app/views/stream/stream-module.ts 25:0-82@
./src/app/app.module.ts@./src/app/index.ts@./src/main.ts@multi
main vendor.bundle.js:52455./src/app/data/stream-assign.service.ts
模块生成失败:错误:
/Users/adds/Documents/abc/abc cli/cli abc/src/app/data/stream-assign-comm.service.ts
(20,5):导出类的公共方法的返回类型具有或为
使用来自外部模块的名称“ErrorObservable”
“/Users/adds/Documents/abc/abc cli/cli abc/node_modules/rxjs/observable/ErrorObservable”
但无法命名。)在
(/Users/adds/Documents/abc/abc cli/cli abc/node_modules/@ngtools/webpack/src/loader.js:115:15)
在
/Users/adds/Documents/abc/abc cli/cli abc/node_modules/@ngtools/webpack/src/loader.js:140:17
@./src/app/views/stream/stream-module.ts 25:0-82@
./src/app/app.module.ts@./src/app/index.ts@./src/main.ts@multi
主要
以下是我的package.json文件内容:
{
"name": "cli-ark",
"version": "0.0.1",
"license": "MIT",
"angular-cli": {},
"scripts": {
"start": "ng serve",
"lint": "tslint \"src/**/*.ts\"",
"test": "ng test",
"pree2e": "webdriver-manager update",
"e2e": "protractor"
},
"private": true,
"dependencies": {
"@angular/common": "2.2.3",
"@angular/compiler": "2.2.3",
"@angular/core": "2.2.3",
"@angular/forms": "2.2.3",
"@angular/http": "2.2.3",
"@angular/platform-browser": "2.2.3",
"@angular/platform-browser-dynamic": "2.2.3",
"@angular/router": "3.2.3",
"@types/socket.io": "^1.4.27",
"@types/socket.io-client": "^1.4.29",
"angular-in-memory-web-api": "~0.1.15",
"angular2-chartjs": "^0.1.6",
"chart.js": "^2.4.0",
"core-js": "^2.4.1",
"ng2-charts": "^1.4.1",
"rxjs": "5.0.0-beta.12",
"socket.io": "^1.7.2",
"socket.io-client": "^1.7.2",
"ts-helpers": "^1.1.1",
"zone.js": "^0.6.23"
},
"devDependencies": {
"@angular/compiler-cli": "2.2.3",
"@types/jasmine": "2.5.38",
"@types/node": "^6.0.42",
"angular-cli": "1.0.0-beta.22-1",
"codelyzer": "~2.0.0-beta.1",
"jasmine-core": "2.5.2",
"jasmine-spec-reporter": "2.5.0",
"karma": "1.2.0",
"karma-chrome-launcher": "^2.0.0",
"karma-cli": "^1.0.1",
"karma-jasmine": "^1.0.2",
"karma-remap-istanbul": "^0.2.1",
"protractor": "4.0.9",
"ts-node": "1.2.1",
"typescript": "~2.0.3",
"typings": "^1.3.2",
"webdriver-manager": "10.2.5"
}
}
尝试使用:
return Observable.throw(error.json().error || 'Server error');
如果您使用的是rxjs>rc.5,请使用:
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
而不是:
import 'rxjs/add/observable/throw';
这是不必要的
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
在rx更新到5+版本后,您应该使用 可观测误差 而不是 扔 您的代码应该从以下位置更新:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
...
this.somethingReturnObservable.get()
.filter( val => val*2)
.do((val) => {
// do something for example
})
.switchMap(trans => Observable.throw( 'some error' ))
.catch( (er, c) => dosomething);
致:
我试过了。不幸的是,没有区别。仍然收到相同的错误。只是在上面添加了我的package.json文件。Re:rxjs,我正在使用:“rxjs”:“5.0.0-beta.12”,啊,刚刚在一个问题文件上尝试过,我的15个错误减少到14个。所以可能就是这样。我会继续申请其他文件。谢谢是的!这是必要的修复。我仍然感到奇怪的是,在最初的Angular 2应用程序中,这并没有导致错误,但在Angular CLI版本中却导致了错误。对此有什么见解吗?不管怎样,现在都解决了。非常感谢!
import { ErrorObservable } from 'rxjs/observable/errorObservable';
import { switchMap, tap, catchError, filter } from 'rxjs/operators';
...
this.somethingReturnObservable.get()
.pipe(
filter( val => val*2)
tap( (val) => {// do something for example} ),
switchMap( trans => ErrorObservable.create( 'some error' ) ),
catchError( (er, c) => dosomething);
);