Я использую mon goose и Typescript, и я хочу знать, какой тип или типы я должен использовать для ссылочного поля при создании интерфейса? Рассмотрим следующие два взаимосвязанных интерфейса:
interface ICat {
name: string,
colour: string,
}
interface ICatDB extends ICat, Document {};
interface IMouse {
name: string,
colour: string,
chasedBy: /* ... */
}
interface IMouseDB extends IMouse, Document {};
и схемы и модели, которые их используют:
let cat = new Schema({
name: String,
colour: String,
});
mongoose.model<ICatDB>('Cat', cat);
let mouse = new Schema({
name: String,
colour: String,
chasedBy: { type: Schema.Types.ObjectId, ref: 'Cat' }
});
mongoose.model<IMouseDB>('Mouse', mouse);
Для поля chasedBy
нам необходимо рассмотреть что он может принимать значения в трех формах:
String
или ObjectId
при передаче в метод create()
ObjectId
при возврате из Mon goose - Экземпляр
ICat
при возврате из пн goose с использованием populate()
Есть ли способ указать типы, которые может поддерживать интерфейс, без необходимости прибегая к использованию any
?
Кстати, мы разделили IMouse
и IMouseDB
, так как Typescript хотел, чтобы все поля для Document
заполнялись каждый раз, когда мы создавали новый объект IMouse
, так что это было работа вокруг.