Обновление данных для класса, но без одного поля (Angular, Firestore, AngularFire2) - PullRequest
0 голосов
/ 07 мая 2018

Я хочу обновлять несколько полей в моем Firestore каждый раз, когда пользователь входит в систему. У меня есть следующий метод.

  private updateUserData(user: firebase.User) {
    const userRef: AngularFirestoreDocument<AppUser> = this.afs.doc(
      `users/${user.uid}`
    );

    const data: AppUser = {
      uid: user.uid,
      email: user.email,
      name: user.displayName
    };
    return userRef.set(data, { merge: true });
  }

У меня есть класс модели пользователя, например:

    export class AppUser {
    uid: string;
    email: string;
    name?: string;
    isAdmin: boolean;
  }

и я хочу обновить все, кроме поля isAdmin, поэтому я создал переменную:

const data: AppUser = {
  uid: user.uid,
  email: user.email,
  name: user.displayName
};

код работает нормально, но я получаю сообщение об ошибке компилятора, которое ищет поле isAdmin. Есть ли способ просто пропустить изменение поля isAdmin?

Angular

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, вам нужно будет сделать поле isAdmin необязательным в вашем классе AppUser.Вот почему вы получили ошибку.Кроме того, я мог бы рассмотреть использование interface вместо класса, если вы просто хотите определить типы для объекта JS.

Затем, чтобы просто пропустить это поле, я рекомендую использовать Lodash.

  import * as _ from 'lodash';


  private updateUserData(user: firebase.User) {
    const userRef: AngularFirestoreDocument<AppUser> = this.afs.doc(
      `users/${user.uid}`
    );

    return userRef.set(_.omit(data, 'isAdmin'), { merge: true });
  }

Подробнее здесь: https://lodash.com/docs/4.17.10#omit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...