我试图从Angular调用一个API,但得到这个错误:

属性“map”在类型“Observable<Response>”上不存在

这个类似问题的答案并没有解决我的问题:Angular 2 beta版。17:属性“map”在类型“Observable<Response>”上不存在。

我使用的是Angular 2.0.0-beta.17。


当前回答

首先运行安装,如下所示:

npm install --save rxjs-compat@6

现在你需要在service.ts中导入rxjs:

import 'rxjs/Rx'; 

瞧!问题已经解决了。

其他回答

对于所有遇到此问题的Linux用户,检查rxjs-compat文件夹是否被锁定。我有这个完全相同的问题,我进入终端,使用sudo su给整个rxjs-compat文件夹的权限,它是固定的。假设你进口了

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch'; 

在项目中。原始的.map错误发生在Ts文件中。

在我的情况下,只包括地图和承诺是不够的:

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';

在最新的Angular 7中。,你可以简单地尝试:

import { Observable, of } from "rxjs";
import { map, catchError } from "rxjs/operators";

然后你可以使用下面这些方法:

   private getHtml(): Observable<any> {
    return this.http.get("../../assets/test-data/preview.html").pipe(
      map((res: any) => res.json()),
      catchError(<T>(error: any, result?: T) => {
        console.log(error);
        return of(result as T);
      })
    );
  }

查看这个演示以获得更多细节。

我使用的是Angular 5.2,当我使用import 'rxjs/Rx';它抛出我以下lint错误: TSLint:此导入被列入黑名单,改为导入子模块(import-blacklist)

请看下面的截图:

解决方案: 通过只导入我需要的操作符解决了这个问题。例子如下:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';

因此,解决办法是只导入必要的操作符。

只需在项目的VS Code终端中写入此命令并重新启动项目。

npm install rxjs-compat

你需要通过添加这个来导入map操作符:

import 'rxjs/add/operator/map';