我刚开始使用angularfire2版本5,试图将接口分配给从AngularFireDatabase.object方法返回的对象,但是在类型检查时遇到错误:类型'Observable <{}>'不能分配给类型'Observable'>
该项目是使用Angular 7生成的。
import { AngularFireDatabase, AngularFireObject } from 'angularfire2/database';
import { Injectable } from '@angular/core';
import { ShoppingCart } from './models/shopping-cart';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class ShoppingCartService {
constructor(private db: AngularFireDatabase) {
}
async getCart(): Promise<Observable<ShoppingCart>> {
let cartId = await this.getOrCreateCartId();
return this.db.object('/shopping-carts/' + cartId).valueChanges();
}
}
如果我不注释getCart方法,则错误消失,在这种情况下,显示getCart方法返回{}的Promise Observable。
那么,为什么AngularFireDatabase.object('...')。valueChanges()不像应有的那样返回 any 类型的promise Observable?以及如何为AngularFireDatabase.object('...')。valueChanges()返回的对象分配类型接口?
答案 0 :(得分:0)
安装用于角度的官方Firebase库
npm install firebase @ angular / fire --save
重构您的getOrCreateCartId
方法以返回可观察值而不是promise
然后使用它
getCart(): Observable<ShoppingCart> {
return this.getOrCreateCartId()
.pipe(
switchMap((cartId: string) => {
const cart = this.db.doc<ShoppingCart>('shopping-carts/' + cartId);
return cart.valueChanges();
})
)
}
否则,如果您仍然希望返回
async getCart(): Observable<ShoppingCart> {
const cardId = await this.getOrCreateCartId();
const cart = this.db.doc<ShoppingCart>('shopping-carts/' + cartId);
return cart.valueChanges().toPromise();
}
但请注意,自从您 toPromise
被使用以来,您就会
通知,您可以使用 from()