Прежде всего, я хочу сказать, что этот вопрос похож на этот , который ссылается на этот .У меня точно такой же вопрос, как и во второй ссылке, за исключением заметной разницы.Я пытаюсь расширить класс, сгенерированный NestJS, который определяет свойство.
Я использую NestJ с первым подходом схемы, найденным здесь .Я также создаю файл классов на основе моей схемы GraphQL.
Вот схема:
type Location {
name: String!
owner: User!
}
, которая генерирует класс:
export class Location {
name: string;
owner: User;
}
Теперь,Я хочу расширить этот класс, чтобы мне не приходилось повторять данные (гораздо больше полей не показано).Я также хочу добавить поля, которые живут в документе, но отсутствуют в схеме (_id
в этом примере).Вот мой LocationDocument и моя схема.
export interface LocationDocument extends Location, Document {
_id: Types.ObjectId
}
export const LocationSchema: Schema = new Schema(
{
name: {
type: String,
required: true,
},
owner: {
type: Types.ObjectId,
ref: 'User',
}
);
Теперь вот моя проблема.Сгенерированный класс Location
из схемы GraphQL определяет свойство owner
как тип User
.Но на самом деле это просто идентификатор mongodb, пока он не будет заполнен Mongoose.Так что это может быть Types.ObjectId
или User
на UserDocument
.Поэтому я попытался определить его как:
export interface LocationDocument extends Location, Document {
_id: Types.ObjectId
owner: User | Types.ObjectId;
}
Но это приводит к ошибке в компиляторе, что LocationDocument неправильно расширяет Location.Это имеет смысл.Есть ли способ расширить класс пользователя, но сказать, что свойство владельца может быть типом пользователя (когда-то заполненным Mongoose) или идентификатором объекта Монго (как хранится в базе данных).