Angular-“没有导出成员'可观察'”


156

码

错误信息

打字稿代码:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';

@Injectable({
  providedIn: 'root'
})
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }

}

错误信息:

错误TS2307:找不到模块“ rxjs-compat / Observable”。node_modules / rxjs / observable / of.d.ts(1,15):错误TS2307:找不到模块“ rxjs-compat / observable / of”。src / app / hero.service.ts(2,10):错误TS2305:模块'“ F:/ heroes / node_modules / rxjs / Observable” /没有可导出成员。src / app / hero.service.ts(15,12):错误TS2304:找不到名称“ of”。

package.json Angular版本的文件:

版


3
您使用的框架名为Angular。AngularJS是一个不同的框架。
JB Nizet '18

9
似乎您正在使用RxJS6。使用该版本时,需要更改导入(请参见发行说明)。如果你不使用角6,那么你应该RxJS 5.坚持
JB Nizet

thx.I'm使用Angular6.0〜
托马斯·李

5
然后是相关的文档:next.angular.io/guide/rx-library。请注意,导入不是您正在使用的导入。
JB Nizet '18

Answers:


205

有关更多信息,这可能对Angular 6有所帮助,请参阅此文档。

  1. rxjs:创建方法,类型,调度程序和实用程序
从'rxjs'导入{可观察,主题,asapScheduler,管道,间隔,合并,fromEvent};
  1. rxjs / operators:所有可管道运算符:
从“ rxjs / operators”导入{地图,过滤器,扫描};
  1. rxjs / webSocket: Web套接字主题实现
从'rxjs / webSocket'导入{webSocket};
  1. rxjs / ajax:Rx ajax实现
从'rxjs / ajax'导入{ajax};
  1. rxjs / testing:测试实用程序
从'rxjs / testing'导入{TestScheduler};

4
您如何“解决这个问题”?从第一手?搜索SO是可行的,但是如果该库使用得不太好。
cjb110

12
npm install rxjs-compat --save
EvAlex

115

显然(正如您在错误日志中所指出的那样),在更新到Angular 6.0.0之后,缺少rxjs-compat。

运行npm install rxjs-compat --save安装。应该修复它。


3
我也面临着同样的问题,但是如果我不想使用向后兼容包怎么办?
Prasanna Sasne

2
如果我们不想使用rxjs-compat怎么办?
恩里科

2
这应该是正确的答案。这不是前进的正确答案……但是绝对是“现在”的答案。
William Terrill


56

我用替换了原始代码import { Observable, of } from 'rxjs',问题解决了。

在此处输入图片说明

在此处输入图片说明


30

您正在使用RxJS6。只需替换

import { Observable } from 'rxjs/Observable';
import { of } from 'rxjs/observable/of';

通过

import { Observable, of } from 'rxjs';


10

帮助我的是:

  1. 摆脱所有旧的导入路径,并用如下新路径替换它们:

    import { Observable , BehaviorSubject } from 'rxjs';)

  2. 删除资料node_modules

  3. npm cache verify
  4. npm install

6

我有一个类似的问题。将RXJS从6.x反向更新到最新的5.x版本已将其修复为Angular5.2.x。

打开package.json。

更改"rxjs": "^6.0.0","rxjs": "^5.5.10",

npm update


我认为这是最好的做法,因为Angular 6仅支持rxjs 6。
David D.

4

只需/Observable'rxjs/Observable';

如果您Cannot find module 'rxjs-compat/Observable'只是将其置于行下方到thr终端,然后按Enter。

npm install --save rxjs-compat

2

我的决议是添加以下导入: import { of } from 'rxjs/observable/of';

因此,更改后的hero.service.ts的总体代码为:

import { Injectable } from '@angular/core';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { of } from 'rxjs/observable/of';
import {Observable} from 'rxjs/Observable';

@Injectable()
export class HeroService {

  constructor() { }

  getHeroes(): Observable<Hero[]> {
    return of(HEROES);
  }
}

嗯,这就是他开始的错误,出口不存在。
Zlatko

2

angular-splitAngular 6不支持该组件,因此要使其与Angular 6安装兼容,请遵循应用程序中的依赖性

要使其工作直到更新,请使用:

"dependencies": {
"angular-split": "1.0.0-rc.3",
"rxjs": "^6.2.2",
    "rxjs-compat": "^6.2.2",
}

0

在我的情况下,发生此错误是因为我的计算机中有旧版本的ng cli。

运行后问题解决:

ng update

ng update @angular/cli


0

更新angular-in-memory-web-api版本。在教程angular-tour-of-heroes中安装的默认angular-in-memory-web-api版本为0.4。就我而言,它就像一种魅力。(将Angular 7与RxJS 6结合使用)

npm i angular-in-memory-web-api@0.8.0

-3

return Observable.of(HEROES);


1
尽管此答案可能是正确且有用的,但如果您在其中包含一些解释以说明它如何帮助解决问题,则最好使用该答案。如果发生更改(可能不相关)导致它停止工作,并且用户需要了解它曾经如何工作,那么这在将来特别有用。
Erty Seidohl

如果您仔细阅读了该问题,将会看到有关Angular 6和rxjs 6的信息,而不是5。此问题特定于rxjs v6 +,而您发布的解决方案与rxjs(和Angular)v5有关。
Zlatko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.