Ниже приведен код в моем проекте машинописного текста:
admin.firestore().collection('posts').doc(postId).get().then((data) => {
let likesCount = data.data()?.likesCount || 0;
let likes = data.data()?.likes || [];
let updateData = {};
if (action == 'like') {
updateData['likesCount'] = ++likesCount;
updateData[`likes.${userId}`] = true;
} else {
updateData['likesCount'] = --likesCount;
updateData[`likes.${userId}`] = false;
}
admin.firestore().collection('posts').doc(postId).update(updateData).then(() => {
response.status(200).send('Done');
}).catch((err) => {
response.status(err.code).send(err.message);
});
}).catch((err) => {
response.status(err.code).send(err.message);
});
Я копирую это из учебника, но получаю ошибку, когда пытаюсь присвоить значения в блоках if & else .
Вот сообщения об ошибках, которые я получаю:
Элемент неявно имеет тип 'any', потому что выражение типа 'likesCount' 'нельзя использовать для индексации типа '{}'. Свойство «likesCount» не существует для типа «{}».
Элемент неявно имеет тип «любой», поскольку выражение типа «строка» нельзя использовать для индексации типа «{}». Нет подписи индекса с параметром типа 'string' для типа '{}'.
Я попытался создать интерфейс и использовать его, как показано ниже:
interface UpdateData {
likesCount: number,
likes: string
}
let updateData = {} as UpdateData;
Но это просто дает мне такую ошибку:
Элемент неявно имеет тип 'any', потому что выражение типа 'string' нельзя использовать для индексации типа 'UpdateData'. Нет подписи индекса с параметром типа 'string' для типа 'UpdateData'.
Кроме того, я думаю, что при использовании этого интерфейса проблема состоит в том, что с этими значениями * связано более двух этих значений. 1023 * данные , которые я получаю из хранилища, поэтому я все еще хочу, чтобы эти данные существовали после обновления этих двух значений.
Может кто-нибудь сказать, пожалуйста, как решить эту проблему? вопрос