Angular 2 beta.17:Property'map'在types'Observable <Response>'上不存在
我刚刚从Angular2 beta16升级到beta17,而这又需要rxjs 5.0.0-beta.6。 (在这里更新日志: https : //github.com/angular/angular/blob/master/CHANGELOG.md#200-beta17-2016-04-28 )在beta16中,所有关于Observable / mapfunction的工作都很顺利。 在升级后出现以下错误,当打字稿尝试传送时出现以下错误:
- 属性'map'在types'Observable'上不存在(我曾经用过可观察的地图)
- c:/path/node_modules/rxjs/add/operator/map.d.ts(2,16):错误TS2435:环境模块不能嵌套在其他模块或命名空间中。
- c:/path/node_modules/rxjs/add/operator/map.d.ts(2,16):错误TS2436:环境模块声明不能指定相对模块名称。
我已经看到这个问题/答案,但它不能解决问题: Angular2 beta.12和RxJs 5 beta.3的可观察错误
我的appBoot.ts看起来像这样(我已经引用了rxjs / map):
///<reference path="./../node_modules/angular2/typings/browser.d.ts"/> import {bootstrap} from "angular2/platform/browser"; import {ROUTER_PROVIDERS} from 'angular2/router'; import {HTTP_PROVIDERS} from 'angular2/http'; [stuff] import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; import {enableProdMode} from 'angular2/core'; import { Title } from 'angular2/platform/browser'; //enableProdMode(); bootstrap(AppDesktopComponent, [ ROUTER_PROVIDERS, HTTP_PROVIDERS, Title ]);
任何人有任何想法会发生什么事情?
您需要导入map
运算符:
import 'rxjs/add/operator/map'
我把我的gulp-typescript插件升级到最新版本(2.13.0),现在编译没有问题。
更新1:我以前使用gulp-typescript版本2.12.0
更新2:如果您升级到Angular 2.0.0-rc.1,则需要在appBoot.ts文件中执行以下操作:
///<reference path="./../typings/browser/ambient/es6-shim/index.d.ts"/> import { bootstrap } from "@angular/platform-browser-dynamic"; import { ROUTER_PROVIDERS } from '@angular/router-deprecated'; import { HTTP_PROVIDERS } from '@angular/http'; import { AppComponent } from "./path/AppComponent"; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; // import 'rxjs/Rx'; this will load all features import { enableProdMode } from '@angular/core'; import { Title } from '@angular/platform-browser'; //enableProdMode(); bootstrap(AppComponent, [ ROUTER_PROVIDERS, HTTP_PROVIDERS, Title ]);
重要的是参考es6-shim / index.d.ts
假设您已经安装了es6-shimtypes,如下所示:
更多关于Angular的types安装: https ://angular.io/docs/ts/latest/guide/typescript-configuration.html#!#typings
如果你碰巧在VS2015中看到这个错误,这里提到了一个github问题和解决方法:
https://github.com/Microsoft/TypeScript/issues/8518#issuecomment-229506507
这确实帮助我解决property map does not exist on observable
问题。 此外,请确保您的打字稿版本高于1.8.2
在我的情况下,仅包括地图和承诺是不够的:
import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise';
我通过导入几个rxjs组件来解决这个问题:
1)在一个app / rxjs-operators.ts文件中导入语句:
// import 'rxjs/Rx'; // adds ALL RxJS statics & operators to Observable // See node_module/rxjs/Rxjs.js // Import just the rxjs statics and operators we need for THIS app. // Statics import 'rxjs/add/observable/throw'; // Operators import 'rxjs/add/operator/catch'; import 'rxjs/add/operator/debounceTime'; import 'rxjs/add/operator/distinctUntilChanged'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/switchMap'; import 'rxjs/add/operator/toPromise';
2)在您的服务中导入rxjs-operator本身:
// Add the RxJS Observable operators we need in this app. import './rxjs-operators';
更新2016年9月29日,Angular 2.0 Final&VS 2015
解决方法不再需要,解决你只需要安装TypeScript 2.0.3版本 。
修正从这个github问题评论的编辑。
它看起来像最新的RxJS需要打字稿1.8所以打字稿1.7报告上述错误。
我通过升级到最新的打字稿版本解决了这个问题。