Машинопись говорит, что или change
или data
возможно undefined
(в зависимости от того, что возвращает onUpdate
).
Так что вы должны обернуть его в нулевую / неопределенную проверку
if(change && change.after && change.after.data){
const data = change.after.data();
const maxLen = 100;
const msgLen = data.messages.length;
const charLen = JSON.stringify(data).length;
const batch = db.batch();
if (charLen >= 10000 || msgLen >= maxLen) {
// Always delete at least 1 message
const deleteCount = msgLen - maxLen <= 0 ? 1 : msgLen - maxLen
data.messages.splice(0, deleteCount);
const ref = db.collection("chats").doc(change.after.id);
batch.set(ref, data, { merge: true });
return batch.commit();
} else {
return null;
}
}
Если вы на 100% уверены, что ваш object
всегда определен, вы можете указать это:
const data = change.after!.data();