【问题标题】:Typescript Omit property not working with 'as' keywordTypescript Omit 属性不适用于“as”关键字
【发布时间】:2020-01-03 12:58:03
【问题描述】:

在注册期间,两个属性都需要,但之后不需要密码。 这个想法是,对于注册和身份验证,系统将使用 firebase 内置函数,但系统将存储在 firebase 用户集合中的所有其他内容。

我的问题是,当我有两种类型的用户(一种用于注册,一种通用类型)时:

export interface RegistrationUser extends firebase.UserInfo {
  email: string;
  password: string;
}

export type User = Omit<RegistrationUser, 'password'>;

registerUser(user: RegistrationUser) {
    this.auth.createUserWithEmailAndPassword(user.email, user.password).then(()=> {
      let newUser = user as User;
      // save user prop to firebase user collection
      this.collection.add(newUser);
    });
}

尽管有 'as' 关键字,password 属性仍然保存。 如何设置不将密码保存到用户集合?

谢谢

【问题讨论】:

    标签: angular typescript firebase firebase-authentication


    【解决方案1】:

    当您执行此类操作时,Typescript 并不会真正删除该属性。它仅用于静态分析类型的目的(Typescript 在运行时不存在)。要真正删除该属性,您需要执行以下操作:

    const newUser: User = {email: user.email};
    

    【讨论】:

    • 不幸的是我有一堆道具(这只是演示我的目的)
    • 我明白了...您每次都需要创建另一个对象或使用“删除”运算符developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • 你也可以使用像const { password, ...newUser } = user;这样的对象解构,它将所有(自己的可枚举的)属性除了 passworduser复制到newUser。跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多