简体   繁体   English

“可观察”类型上不存在属性“地图”<book[]> '</book[]>

[英]Property 'map' does not exist on type 'Observable<Book[]>'

import { Injectable } from '@angular/core';
import { Book } from './book';
import { Observable } from 'rxjs';
import { of } from 'rxjs';
import 'rxjs/add/operator/map';




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

  constructor() { }


  BOOKS : Book[]=[
    
    {"id": 1, "name" : "JavaScript",  "price" :"100", "description": "javscript"},
    {"id": 2, "name" : "Angualr",  "price" :"200", "description": "Angualr"},
    {"id": 3, "name" : "Sql server",  "price" :"3000", "description": "Sql server"},
    {"id": 4, "name" : "Typescript",  "price" :"5000", "description": "Typescript"},
    
  ]


  getBooks(): Observable<Book[]>{
    return of(this.BOOKS);
  }

  getBook(id: number): Observable<Book>{
    return this.getBooks().map(books=> books.find(book=>book.id === id));
  }
}

Property 'map' does not exist on type 'Observable<Book[]>'.ts(2339) 'Observable<Book[]>'.ts(2339) 类型上不存在属性 'map'

Property 'map' does not exist on type 'Observable<Book[]>'.ts(2339) 'Observable<Book[]>'.ts(2339) 类型上不存在属性 'map'

Property 'map' does not exist on type 'Observable<Book[]>'.ts(2339) 'Observable<Book[]>'.ts(2339) 类型上不存在属性 'map'

Property 'map' does not exist on type 'Observable<Book[]>'.ts(2339) 'Observable<Book[]>'.ts(2339) 类型上不存在属性 'map'

I suppose you are using rxjs 6+ version (if no, please provide your version) so you need to use pipeable operators instead of directly call them over observable:我想您使用的是 rxjs 6+ 版本(如果没有,请提供您的版本),因此您需要使用可管道运算符而不是直接通过 observable 调用它们:

import {map} from 'rxjs/operators';

***

getBook(id: number): Observable<Book>{
  return this.getBooks()
    .pipe(map(books=> books.find(book=>book.id === id)));
}

https://rxjs.dev/guide/v6/pipeable-operators https://rxjs.dev/guide/v6/pipeable-operators

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM