【问题标题】:Argument of type 'User' is not assignable to parameter of type 'FirebaseOperation'“用户”类型的参数不可分配给“FirebaseOperation”类型的参数
【发布时间】:2021-06-17 08:42:18
【问题描述】:

目前,我正面临这个问题,我不知道它是怎么回事:

SetUserData(user) {
const userRef: AngularFireList<any> = this.firebase.list(`users/${user.uid}`);
const userData: User = {
  uid: user.uid,
  email: user.email,
  displayName: user.displayName,
  photoURL: user.photoURL,
  emailVerified: user.emailVerified
}
return userRef.set(userData, {
  merge: true
})
}

这是控制台中的错误:

错误 TS2345:“用户”类型的参数不可分配给“FirebaseOperation”类型的参数。 “用户”类型缺少“DataSnapshot”类型的以下属性:child、exists、exportVal、 forEach,还有 8 个。

【问题讨论】:

  • 您的代码中的User 是什么?请注意,Firebase 只能存储 JSON 对象,不能存储其他 JavaScript 对象(例如包含函数的对象)。
  • 我已经导入了这个接口:export interface User { uid: string;电子邮件:字符串;显示名称:字符串;照片网址:字符串;电子邮件已验证:布尔值; }

标签: javascript angular firebase firebase-realtime-database angularfire


【解决方案1】:

这个简单的解决方案对我有用。您可以根据旧对象返回一个新对象。

添加“Object.assign()”以返回一个新对象。 Mozilla - Object.assign()

Object.assign()

您的代码已重构

SetUserData(user) {
  const userRef: AngularFireList<any> = 
  this.firebase.list(`users/${user.uid}`);
  const userData: User = Object.assign({
    uid: user.uid,
    email: user.email,
    displayName: user.displayName,
    photoURL: user.photoURL,
    emailVerified: user.emailVerified
  })
  return userRef.set(userData, {
    merge: true
  })
}

您可以使用解构方法进行重构,见下文

// Don't forget to import this line
import firebase from "firebase/compat";

SetUserData({ uid, email, displayName, photoURL, emailVerified }: firebase.User) {
  const userRef: AngularFireList<any> = this.firebase.list(`users/${uid}`);
  const userData = Object.assign({ uid, email, displayName, photoURL, emailVerified })
  return userRef.set(userData, { merge: true })
}

【讨论】:

    猜你喜欢
    • 2019-06-24
    • 2021-06-14
    • 2021-02-03
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多