【发布时间】:2020-03-15 20:52:10
【问题描述】:
以下是我的打字稿项目中的一些代码:
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 块中分配值时出现错误。
这是我收到的错误消息:
元素隐含地具有“任何”类型,因为类型的表达式 '"likesCount"' 不能用于索引类型 '{}'。财产 类型“{}”上不存在“likesCount”。
元素隐含地具有“任何”类型,因为类型的表达式 “字符串”不能用于索引类型“{}”。没有带有 a 的索引签名 在“{}”类型上找到“字符串”类型的参数。
我尝试过创建一个界面并使用如下所示:
interface UpdateData {
likesCount: number,
likes: string
}
let updateData = {} as UpdateData;
但这只会给我这样的错误:
元素隐含地具有“任何”类型,因为类型的表达式 'string' 不能用于索引类型 'UpdateData'。无索引 在类型上找到带有“字符串”类型参数的签名 '更新数据'。
另外,我认为使用此接口的问题是,与我从 firestore 获取的 data 相关联的值不止这 2 个,所以我仍然希望这些数据在更新这两个值后仍然存在。
谁能告诉我如何解决这个问题?
【问题讨论】:
标签: angular typescript firebase google-cloud-firestore