将对象映射到接口并删除所有不存在的键

问题描述 投票:1回答:1

我想使用TypeORM创建NestJS API,并希望将数据库用户映射到要发送到客户端的响应模型。我的UserEntity仅包含一些基本信息

@Entity('User')
export class UserEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  passwordHash: string;

  @Column()
  passwordSalt: string;
}

但是显然我无法将密码信息发送回客户端。我创建了一个仅包含相关信息的响应对象

export interface UserRO {
  id: number;
  username: string;
}

[当调用GET / users时,我希望有一组UserRO。所以我去了

  public async find(): Promise<UserRO[]> {
    return this.usersRepository.find(); // returning a list of UserEntities
  }

不幸的是,没有映射,因此响应对象仍然包含密码信息。我用此代码证明了]

  public async find(): Promise<UserRO[]> {
    const dbUsers: UserEntity[] = await this.usersRepository.find();
    const roUsers: UserRO[] = dbUsers;
    console.log(dbUsers);
    console.log(roUsers); // still holding the password information

    return roUsers;
  }

我还使用地图功能添加了快速修复

  public async find(): Promise<UserRO[]> {
    const dbUsers: UserEntity[] = await this.usersRepository.find();
    const roUsers: UserRO[] = dbUsers.map((dbUser: UserEntity) => {
      return {
        id: dbUser.id,
        username: dbUser.username,
      };
    });
    console.log(dbUsers);
    console.log(roUsers); // not holding the password information anymore

    return roUsers;
  }

我的问题是:我真的必须手动执行此操作吗?我希望TypeScript删除或忽略所有“未知”键,而仅从匹配键中获取值。

javascript typescript nestjs typeorm
1个回答
3
投票

在列设置中,可以添加选项select: false,以避免在从数据库中选择实体时避免包括该字段:Hidden columns

© www.soinside.com 2019 - 2024. All rights reserved.