无法在Angular项目中使用rxjs的地图运算符

时间:2018-11-27 04:04:12

标签: node.js angular rxjs

我尝试在我的Angular项目中使用rxjs的地图运算符,但发生以下错误

ERROR in src/app/core/service/session.service.ts(88,9): error TS2552: Cannot find name 'map'. Did you mean 'Map'?

我想念什么吗?

Angular CLI 7.0.4

节点10.13.0

rxjs 6.3.3

打字稿3.1.6

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';// This is where I import map operator
import { SessionService } from '../service/session.service';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  constructor(private session: SessionService,
    private router: Router) {
  }

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> |boolean {
    return this.session
  .checkLoginState()//Returns an Observable of Session
  .pipe(
    map(session => {
      if (!session.login) {
        this.router.navigate(['']);
      }
      return session.login;
    })
   )
 }
}

2 个答案:

答案 0 :(得分:7)

发生了我的错误,因为我忘记检查该函数的导入,VS代码总是这样做,但有时却不行。检查是否相同,只需添加...

import { map, catchError } from 'rxjs/operators';

答案 1 :(得分:0)

Map,Set和Promise是ES6的功能。 在您的tsconfig.json中,您正在使用:

"target": "es5" 

使用

"target": "es6" 

或者您也可以尝试在第

行下方添加
"lib": ["es6"] 

避免更改目标,因为目标用于告诉Typescript将您的.ts文件编译到哪个ECMAScript版本中。当然,您可以更改它,如果您的应用程序将在其中运行的浏览器将支持该版本的ECMAScript。

或最简单的方法是安装

npm install --save-dev @types/core-js