首页 > 解决方案 > Typescript Omit 属性不适用于“as”关键字

问题描述

在注册期间,两个属性都需要,但之后不需要密码。这个想法是,对于注册和身份验证,系统将使用 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属性仍然保存。如何设置不将密码保存到用户集合?

谢谢

标签: angulartypescriptfirebasefirebase-authentication

解决方案


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

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

推荐阅读