Как исправить эту ошибку TSLint (объект, возможно, «неопределен») для пожарного магазина - PullRequest
0 голосов
/ 18 мая 2019

Я использую этот пример ниже firesotre из этой ссылки .Как бы то ни было, я получаю ошибку Возможно, объект 'undefined' для данных в data.name.Я уверен, что у меня есть имя в документе.Как я могу решить эту проблему, пожалуйста.

// Listen for updates to any `user` document.
exports.countNameChanges = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Retrieve the current and previous value
      const data = change.after.data();
      const previousData = change.before.data();

      // We'll only update if the name has changed.
      // This is crucial to prevent infinite loops.
      if (data.name == previousData.name) return null;

      // Retrieve the current count of name changes
      let count = data.name_change_count;
      if (!count) {
        count = 0;
      }

      // Then return a promise of a set operation to update the count
      return change.after.ref.set({
        name_change_count: count + 1
      }, {merge: true});
    });

1 Ответ

0 голосов
/ 18 мая 2019

Если вы посмотрите на определение TypeScript change.after.data(), вы увидите, что метод данных объявлен как возвращающий неопределенный объект или объект.Поскольку он может возвращать неопределенное значение, вам нужно проверить этот случай, прежде чем начинать обращаться к свойствам или методам для него, когда TypeScript находится в строгом режиме.И вы должны сделать это, даже если вы абсолютно уверены, что ваш документ будет иметь именованное свойство.

Вы можете отключить строгий режим (который я не рекомендую - строгий режим защитит вас отошибки программирования), или вы можете проверить data и previousData, прежде чем начать их использовать.

const data = change.after.data();
const previousData = change.before.data();
if (data && previousData) {
    // do stuff with them
}
...