#ionic-framework #photo-gallery
Вопрос:
поэтому я пытаюсь создать образец проекта фотогалереи для ionic, и я застрял на этой ошибке. не совсем понимаю, что я имею в виду на самом деле. я попытался понизить рейтинг пакета npm. не сработало. все остальные вопросы как бы еще больше сбивают меня с толку, так что вот полная ошибка:
ошибка TS2345: Аргумент типа ‘{ путь к файлу: строка; webviewPath: строка; }’ не может быть присвоен параметру типа ‘Фотография’. [ng] Литерал объекта может указывать только известные свойства, а «путь к файлу» не существует в типе «Фотография».
Комментарии:
1. вы возвращаетесь
{ filepath: string; webviewPath: string; }'
из api, а затем читаете его через приложение или веб-страницу?2. я читаю это через git bash. поэтому, в основном, когда я делаю ionic, он компилируется, а затем открывает вкладку broswer, на которой отображается само приложение . но когда появляется ошибка, она говорит, что не удалось скомпилировать
3. из того, что я вижу, когда вы пытаетесь сохранить путь к изображению в изображении, возможно, сохраните путь отдельно и попробуйте перейти к изображению с другим вызовом, используя путь.
Ответ №1:
Я считаю, что они допустили ошибку в учебнике. Они дают интерфейсу то же имя, что и при импорте фотографий из «@конденсатор/камера». Вместо этого дайте интерфейсу имя «UserPhoto».
Мой источник просматривает репозиторий ionic для этого проекта на GitHub: https://github.com/ionic-team/tutorial-photo-gallery-angular
Вам необходимо изменить следующее в photo.service.ts
файле:
export interface UserPhoto {
filepath: string;
webviewPath: string;
}
Это находится в нижней части файла, вне определения PhotoService
класса.
Вам также необходимо определить массив типа UserPhoto
, а не Photo
в вашем PhotoService
методе. Это выглядит так:
export class PhotoService {
public photos: UserPhoto[] = [];
Ответ №2:
У меня была аналогичная проблема, насколько я могу судить (и это сработало для меня), проблема в типе возврата этой функции:
const savePicture = async (
photo: Photo,
fileName: string
): Promise<Photo> => {
const base64Data = await base64FromPath(photo.webPath!);
const savedFile = await Filesystem.writeFile({
path: fileName,
data: base64Data,
directory: Directory.Data,
});
// Use webPath to display the new image instead of base64 since it's
// already loaded into memory
return {
filepath: fileName,
webviewPath: photo.webPath,
};
};
Так и должно быть Promise<UserPhoto>
. Мы знаем это, потому что массив фотографий принимает записи типа UserPhoto.
Поэтому измените вышеуказанную функцию на:
const savePicture = async (
photo: Photo,
fileName: string
): Promise<UserPhoto> => {
const base64Data = await base64FromPath(photo.webPath!);
const savedFile = await Filesystem.writeFile({
path: fileName,
data: base64Data,
directory: Directory.Data,
});
// Use webPath to display the new image instead of base64 since it's
// already loaded into memory
return {
filepath: fileName,
webviewPath: photo.webPath,
};
};
Для справки, я говорю об этом уроке:
https://ionicframework.com/docs/react/your-first-app/saving-photos
В их git по большей части есть рабочий код, поэтому, пожалуйста, используйте его в качестве ссылки: https://github.com/ionic-team/tutorial-photo-gallery-react/blob/main/src/hooks/usePhotoGallery.ts