gpt4 book ai didi

javascript - 将对象映射到接口(interface)并删除所有不存在的键

转载 作者:行者123 更新时间:2023-11-30 10:59:52 25 4
gpt4 key购买 nike

我想用 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;
}

我还添加了使用 map 功能的快速修复

  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 会删除或忽略所有“未知”键,只从匹配的键中获取值。

最佳答案

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

关于javascript - 将对象映射到接口(interface)并删除所有不存在的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58281911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com