Используя Loopback 4, я хочу использовать безопасность типов Typescript в своем коде приложения при получении проверки схемы от декораторов репозитория, но сохранить свойство как сериализованный json (в данном случае Postgres bson), а не какотдельный объект с отношением FK.
Рассмотрим модель адресной книги Contact
, в которой может быть список телефонных номеров:
@model()
export class PhoneNumber {
@property({ required: true })
number: string;
@property()
type: string;
}
@model()
export class Contact extends Entity {
@property({ id: true, required: true })
id: string;
@property({ required: true })
email: string;
@property({ required: true })
name: string;
@property.array(PhoneNumber)
phoneNumbers: PhoneNumber[];
constructor(data?: Partial<Contact>) {
super(data);
}
}
В приведенном выше примере я получаю полную проверку схемы,но если я пытаюсь сохранить экземпляр Contact
, используя сгенерированный Repository
, который расширяет DefaultCrudRespository
, он просто отбрасывает все, что было предоставлено в поле phoneNumbers
, и сохраняет пустой столбец в БД.
Если я изменю аннотацию свойства на:
@property.array(Object)
phoneNumbers: PhoneNumber[];
Это сохранит поле должным образом, сериализованное как json, но не будет пытаться проверить поле, а также не будет указывать тип какмассив PhoneNumber
в сгенерированной спецификации openapi.json
Кажется, что Loopback 3 имел поддержку встроенных моделей: https://loopback.io/doc/en/lb3/Embedded-models-and-relations.html
Нет упоминаний об этом в Loopback4 документа, хотя.