Как сопоставить объект javascript с классом и удалить в нем нежелательные свойства - PullRequest
0 голосов
/ 16 июня 2020

Я использую Typescript, чтобы быть точным, и ExpressJS для создания API.

Предположим, у меня есть модель User:

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, но только в поля id и connections.

Есть ли какой-либо пакет или общий c способ сопоставить все модели, которые я получаю из базы данных, с объектами ответа и включить только те свойства, которые присутствуют в объекте ответа, а не всей модели?

PS: Я не хочу реализовывать это вручную, перебирая оба класса и удаляя свойства вручную. Пожалуйста, предложите другие обходные пути, такие как пакет или что-то еще.

1 Ответ

0 голосов
/ 02 июля 2020

Вы могли бы написать общую c функцию назначения, подобную этой.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...