角度 可观察 不可分配的不可分配. 使用火力基地



我正在使用Angular 8制作带有Firebase后端的待办事项应用程序。

这是我的待办事项服务文件,其中包含以下错误:

Type `Observable unknown[]` is not assignable to type `Observable ITodo[]`.
Type `unknown[]` is not assignable to type `ITodo[]`.
Type `{}` is missing the following properties from type `ITodo`: task, completed
import { AngularFireDatabase } from '@angular/fire/database';
import { Observable } from 'rxjs';
import { ITodo } from './models/todo';
@Injectable({
providedIn: 'root'
})
export class TodosService {
constructor(private db: AngularFireDatabase) { }
createTodo() {
return this.db.list('Todos').push({
task: 'clean',
completed: 'false'
});
}
getTodo(): Observable<ITodo[]>{
return this.db.list('Todos').valueChanges();
}
}

我的界面看起来像这样:

export interface ITodo {
task:string,
completed: boolean
}

有人知道为什么我会收到这个错误吗?谢谢 注意:错误出在我的getTodo方法上。

这是因为您没有为list方法指定泛型,该方法可以选择接受可以对其键入结果的类型变量。

AngularFireDatabase#list的完整定义如下:

list<T>(pathOrRef: PathReference, queryFn?: QueryFn): AngularFireList<T>;

以及接受类型变量的AngularFireList接口的定义:

export interface AngularFireList<T> {
query: DatabaseQuery;
valueChanges(events?: ChildEvent[]): Observable<T[]>;
snapshotChanges(events?: ChildEvent[]): Observable<SnapshotAction<T>[]>;
stateChanges(events?: ChildEvent[]): Observable<SnapshotAction<T>>;
auditTrail(events?: ChildEvent[]): Observable<SnapshotAction<T>[]>;
update(item: FirebaseOperation, data: Partial<T>): Promise<void>;
set(item: FirebaseOperation, data: T): Promise<void>;
push(data: T): database.ThenableReference;
remove(item?: FirebaseOperation): Promise<void>;
}

因此,您应该添加一个类型变量,如下所示:

getTodo(): Observable<ITodo[]>{
return this.db.list<ITodo>('Todos').valueChanges();
}

"将数据检索为列表"文档中也有说明:

数据通过AngularFireDatabase服务检索。该服务也是通用的。提供单数类型,而不是数组类型。

const listRef = db.list('items');
const shirtsRef = db.list<Shirt>('shirts');

相关内容

最新更新