首页 > 解决方案 > 如何将 javascript 对象映射到类并删除其中不需要的属性

问题描述

准确地说,我使用 Typescript 和 ExpressJS 来创建 API。

假设我有一个打字稿用户模型:

class UserModel {
    id: number;
    email: string;
    password: string;
    name: string;
    dob: Date;
    gender: UserGender;
    connections: UserModel[]
}

enum UserGender {
    "MALE" = 1,
    "FEMALE" = 2,
    "OTHER" = 3
}

我想限制对象仅发送响应对象类中包含的那些属性,即

class ConnectionResponse {
    id: number;
    name: string;
    email: string;
    dob: Date,
    gender: UserGender;
}

class UserConnectionsResponse {
    id: number;
    connections: ConnectionResponse[];
}

此类排除了一些属性,例如password应该ConnectionResponse映射到的UserModel

UserConnectionResponse也应该映射到UserModel但只有idandconnections字段。

是否有任何包或通用方法可以将我从数据库中获取的所有模型映射到响应对象,并且只包含响应对象中存在的属性而不是整个模型?

PS:我不想通过循环遍历类和手动删除属性来手动实现这一点。请建议一些其他解决方法,例如包或任何其他东西。

标签: javascriptnode.jstypescriptexpress

解决方案


你可以写一个像这样的通用分配函数。

function assign(target: any, origin: any) {
  let keys = Object.getOwnPropertyNames(target);
  keys.forEach(key => {
    target [key] = origin[key]
  });
}

let source: UserModel = getUserModel();
let dest: UserConnectionsResponse = new UserConnectionsResponse();
assign(dest, source);


推荐阅读