#typescript
Вопрос:
У меня есть следующий код
export interface UserModel {
id: string;
email: string;
password: string;
firstName: string;
lastName: string;
}
Эта модель определяет модель БД. У меня также есть интерфейс, который используется в качестве ответа от API.
export type UserGetResponse = Omit<UserModel, "id" | "password">;
Я не хочу отвечать свойствами id
и. password
Позже при извлечении данных из базы данных я делаю что-то вроде этого
User.scan().then((users: UserModel[]) => users.map((user: UserModel) => user as UserGetResponse))
но id
и password
не удаляются из ответа. Есть ли лучший способ сделать это. Должен ли я создать класс с конструктором, который получает объект UserModel и присваивает только нужные мне свойства?
Ответ №1:
Вы можете сделать это с помощью подхода «черный список». Что-то вроде:
User
.scan()
.then((users: UserModel[]) => users.map((user: UserModel) => {
...user,
id: undefined,
password: undefined,
} as UserGetResponse))
Или, что еще лучше, вы можете сделать это с помощью подхода «белый список». Что-то вроде:
User
.scan()
.then((users: UserModel[]) => users.map((user: UserModel) => {
firstName: user.firstName,
lastName: user.lastName,
email: user.email,
} as UserGetResponse))
Белый список, на мой взгляд, лучше, так как в нем нет риска автоматического включения дополнительных свойств, если/когда структура данных будет расширена.