Я работаю с Prisma для создания схем и моделей для данных моей базы данных.
Здесь я определяю модель пользователя, которая содержит эти данные (тип автоматически создается Prisma):
type User {
name: string,
nickName: string,
sensitiveInfo1: string,
sensitiveInfo2: string
}
Однако, когда мой клиент запрашивает эти данные, я не могу отправить конфиденциальную информацию в полезных данных ответа.
В Prisma есть очень удобный способ определения настраиваемого типа:
import { UserGetPayload } from "./prisma/src/generated/client"
// now I define a custom type
export type UserPublicInfo = UserGetPayload<{
select: {
name: true,
nickName: true,
}
}>
// this gives me the type:
// type UserPublicInfo {
// name: <whatever type name is in the schema>,
// nickName: <whatever type nickName is in the schema>
// }
Теперь предположим, что у меня уже есть экземпляр пользователя, полученный из базы данных, типа User. Я не хочу передавать его в UserPublicInfo таким образом, чтобы полезная нагрузка ответа содержала только информацию UserPublicInfo.
Если я приведу объект типа User, например user as UserPublicInfo
, предложения типа будут указывать в правильном направлении, показывая только атрибуты подтипа. Однако конфиденциальные данные все еще есть.
Я младший в javascipt / typescript, но считаю, что это как-то связано с прототипом объекта. Итак, как я могу использовать это таким образом?