typescript - TypeError: book.isEqual 不是一个函数

标签 typescript function firebase typeerror

在类中定义的方法在其他类中调用时不会被识别为函数。

文件:模型/book.model.ts

export class Book {
    constructor(public title: string, public author: string) {
    }

    isEqual (other: Book ): boolean {
    return (this === other);
    }
}

文件:服务/books.service.ts

import { Book } from '../models/book.model';
import { Subject } from 'rxjs/Subject';
import * as firebase from 'firebase';
import DataSnapshot = firebase.database.DataSnapshot;

export class BooksService {
    books = [new Book ('', '')]
    booksSubject = new Subject<Book[]>();

    constructor() {
    this.getBooks();
    }

    emitBooks() {
    this.booksSubject.next(this.books);
    }

    getBooks() {
    firebase.database().ref('/books')
        .on('value', 
            (data: DataSnapshot) => 
            {
                this.books = data.val() ? data.val() : [];
                this.emitBooks(); /
            }
        );
    }

    indexOfBook (book: Book) {
    const bookIndex = this.books.findIndex(
        (a_book) => {return book.isEqual (a_book)}
    );
    return bookIndex;
    }

我想在 BooksService 类中调用 Book 类的“book.isEqual”方法。 book.isEqual 不被识别为函数,为什么?

最佳答案

Firebase 返回一些数据,但它只是一个对象:您需要使用 new Book() 从该数据创建一个Book 实例>.

firebase.database().ref('/books')
        .on('value', 
            (data: DataSnapshot) => 
            {
                this.books = data.val() ? data.val().map(book => new Book(book[0], book[1])) : [];
                this.emitBooks();
            }
        );
    }

因为我不知道 Firebase 在 val() 中返回什么,这只是一个示例,假设数据包含一个 [author, title] 元组数组,但你明白了。也许它实际上是 new Book(book.author, book.title)...

关于typescript - TypeError: book.isEqual 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56635722/

相关文章:

typescript - 运行时"Mapping types"?

python - 如果我使用自定义字典作为函数的全局变量,为什么我不能访问内置函数?

android - 如何从 Firestore 云数据库读取文档中的 ArrayLists?

typescript - 在 TypeScript 中,为什么找不到 splice 函数的第二个重载?

angular - Typescript, 去掉报错 Error :(54, 33) TS2686 :'fabric' 指的是一个UMD global,但是当前文件是一个模块。考虑改为添加导入

python - 将整数列表作为参数并返回运行总计列表的函数

android - 发布版本中的写入数据缺少 Firebase 时间戳

javascript - 如何防止重复投票react-firebase

javascript - 更改 Angular2 中 Select2 的数据和 processResults 上下文

python - "Try and Except"区分字符串和整数?