Как вы упомянули, вы проверяете, существует ли change.after
. Когда это происходит, вы вызываете метод с именем data()
, который может вернуть FirebaseFirestore.DocumentData
или undefined
. Это означает, что переменная after
может относиться к одному из этих типов, так как в результате метода data()
мог бы быть возвращен undefined
.
. Вы также должны проверить, есть ли typeof after !== 'undefined'
, прежде чем получить доступ к его свойству.
export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {
let userId;
if (change.after) {
// change after exists
const after = change.after.data();
// after can be undefined as data() could return undefined
if (typeof after !== 'undefined') {
userId = after.ownerId; // it's safe to access ownerId
}
}
}
Кроме того, если вы используете typcript v3.7 и выше, вы можете использовать Необязательное сцепление . Код будет выглядеть примерно так:
export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {
const after = change.after?.data();
const userId = after?.ownerId || 'default value';
}
Вы можете пропустить часть || 'default value'
, если userId
может быть undefined
, если данные не возвращаются или ownerId
не возвращается.