Аргумент типа '{query: {}; } 'не присваивается параметру типа QueryFn'

Я создаю угловое приложение, где мне приходится загружать и извлекать изображения из базы данных firebase. Я успешно загружаю изображения, но для извлечения у меня есть следующий бит кода в

service.ts

getFileUploads(query = {}) {
this.fileUploads = this.db.list(this.basePath, {
 query: query
});
return this.fileUploads
}

Я продолжаю получать ошибку

Аргумент типа '{query: {}; } 'не присваивается параметру типа QueryFn.

Литерал объекта может указывать только известные свойства, а "query" не существует в типе "QueryFn".

Ниже приведен весь код service.ts

import {Injectable} from '@angular/core';
import {AngularFireDatabase, AngularFireList} from 'angularfire2/database';
import * as firebase from 'firebase';

import {FileUpload} from '../profile/**********';

@Injectable()
export class UploadFileService {

 constructor(private db: AngularFireDatabase) {}

 private basePath = '/uploads';
 fileUploads: AngularFireList<**********[]>;

 pushFileToStorage(fileUpload: FileUpload, progress: {percentage: number}) 
 {
const storageRef = firebase.storage().ref();
const uploadTask = storageRef.child('${this.basePath}/${fileUpload.file.name}').put(fileUpload.file);

uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,
 (snapshot) => {
 // in progress
 const snap = snapshot as firebase.storage.UploadTaskSnapshot
 progress.percentage = Math.round((snap.bytesTransferred / snap.totalBytes) * 100)
 },
 (error) => {
 // fail
 console.log(error)
 },
 () => {
 // success
 fileUpload.url = uploadTask.snapshot.downloadURL
 fileUpload.name = fileUpload.file.name
 this.saveFileData(fileUpload)
 }
);
}

 private saveFileData(fileUpload: FileUpload) {
 this.db.list('${this.basePath}/').push(fileUpload);
}

 getFileUploads(query = {}) {
this.fileUploads = this.db.list(this.basePath, {
 query: query
});
return this.fileUploads;
}
}
</**********[]>

и следующий компонент component.ts для компонента, где я хочу отображать изображение

import { Component, OnInit } from '@angular/core';
import { ItemService } from '../services/item.service';
import {FileUpload} from '../profile/**********';
import {UploadFileService} from '../services/upload-file.service';
import { AngularFireDatabase, AngularFireList } from 'angularfire2/database'; 

@Component({
 selector: 'app-admin',
 templateUrl: './admin.component.html',
 styleUrls: ['./admin.component.css']
})
export class AdminComponent implements OnInit {

 fileUploads: AngularFireList<**********[]>;

 constructor(private uploadService: UploadFileService) { }

 ngOnInit() {
 this.fileUploads = this.uploadService.getFileUploads({l});
 }
}
</**********[]>
1 ответ

Документация для запроса списка с помощью angularfire2 показывает, что второй параметр для метода list() должен быть функцией, а не объектом.

В частности, определение метода для list() здесь показывает, что оно относится к типу

list<t>(pathOrRef: PathReference, queryFn?: QueryFn): AngularFireList</t>

и что QueryFn (определенный здесь) имеет тип

type QueryFn = (ref: DatabaseReference) => DatabaseQuery;

Таким образом, ошибка правильная, что она ожидает, что вы передадите функцию как второй параметр, а не объект.

Поскольку у вашего собственного параметра query нет определения типа, которое вы разместили здесь, мне трудно точно сказать, что вы думаете о том, что ваш метод getFileUploads будет проходить, но, скорее всего, вам понадобится какое-то преобразование между этим тип объекта и QueryFn тип, который angularfire ожидает.

licensed under cc by-sa 3.0 with attribution.