Angular 6: 属性 'of' 在类型 'typeof Observable' 上不存在

Angular 6: Property 'of' does not exist on type 'typeof Observable'

我正在使用 Angular 6 使用 "rxjs": "^6.0.0",

错误:属性 'of' 在类型 'typeof Observable' 上不存在。

import { Injectable } from '@angular/core';
import { TranslateLoader } from '@ngx-translate/core';
import { Observable, Subject, pipe, of } from 'rxjs';


@Injectable()
export class MiTranslateLoaderService implements TranslateLoader {

  getTranslation(lang: string): Observable<any> {
    return Observable.of({
      lbl_select: 'Select',
    });
  }
}

您需要从 rxjs/observable/of

导入 of
import { of } from "rxjs/observable/of";

用法:

return of({
  lbl_select: 'Select',
});

更新:对于没有 rxjs-compat 的 rxjs 版本 6,您需要从 rxjs 本身导入 of,如@martin 所述。

import { of } from 'rxjs';

Migration guide to rxjs6

随着版本 6 的发布,RxJS 改变了它的内部包结构

https://www.academind.com/learn/javascript/rxjs-6-what-changed/#import-statement-update-path

import 'rxjs/add/observable/of';
// or 
import { of } from 'rxjs/observable/of';

从 RxJS 6 开始,使用 of() 的正确和推荐的方式(Observable.of() 中的 RxJS 5)是这样的:

import { of } from 'rxjs';

我认为这个 import { of } from 'rxjs/observable/of'; 只有在您安装了 rxjs-compat 软件包时才有效。

rxjs 有一些更新:(它的 rxjs6)

import { of } from 'rxjs';

只有当您的应用安装了 rxjs-compat 包时它才会工作

您可以从 rxjs 导入 of:

import { Observable,of } from 'rxjs';

而且只是 return of()

 return of({
      lbl_select: 'Select',
    });

因此您的代码将是:

import { Injectable } from '@angular/core';
import { TranslateLoader } from '@ngx-translate/core';
import { Observable, of } from 'rxjs';


@Injectable()
export class MiTranslateLoaderService implements TranslateLoader {

  getTranslation(lang: string): Observable<any> {
    return of({
      lbl_select: 'Select',
    });
  }
}

解决方法是直接return of(..) :

getTranslation(lang: string): Observable<any> {
    return of({
      lbl_select: 'Select',
    });

这对我有用。

Angular 命令行界面 6.0.8

RxJS 6.2.2

import {of} from 'rxjs/index';


this.dataService.currentData

    .pipe(takeUntil(this.destroy$))
    .pipe(switchMap((myData:MyDataType) =>
      of(this.anotherService.get(myData._id))))
    .pipe(map((response) => {
         if(response instanceof Error) {
            console.log('error:');
            console.dir(response);
         }
         return response;
    }))
    .subscribe((data:any) => {
       doStuff(data);
      },
      response => {
        console.log('response error');
        console.log(response)
      },
      () => {
        console.log('response complete.');


      });