我正在使用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');