newdecline
@newdecline
Front-end-developer

Как исправить ошибку в схеме mongoose?

Есть схема Homepage, в ней поле firstSection. Я хочу хранить в поле firstSection.logo по ссылке файл.
Все ДТО и схемы нужные вроде как описал. Но ругается мне на это дело все. Не пойму почему.

import { Prop, raw, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Types } from 'mongoose';
import { File } from '../../file/file.schema';
import { Feedback } from '../../feedback/schemas/feedback.schema';
import { Portfolio } from '../../portfolio/schemas/portfolio.schema';

@Schema()
export class Homepage extends Document {
  @Prop(raw({
    logo: { type: Types.ObjectId, ref: 'File' },
    slogan: String,
    title: String,
    subtitle: String,
    buttonMoreText: String,
  }))
  firstSection: {
    logo: File,
    slogan: string,
    title: string,
    subtitle: string,
    buttonMoreText: string,
  }

  @Prop(raw({
    sectionTitle: String,
    details: [{ title: String, body: String }],
  }))
  detailsSection: {
    sectionTitle: string,
    details: { title: string, body: string }[],
  }

  @Prop(raw({
    sectionTitle: String,
    directionsOfDevelopment: [{ title: String, body: String }],
    directionsOfDevelopmentExtra: [String]
  }))
  canIHelpSection: {
    sectionTitle: string,
    directionsOfDevelopment: { title: string, body: string }[],
    directionsOfDevelopmentExtra: string[]
  }

  @Prop(raw({
    sectionTitle: String,
    questions: [{ label: String, text: String }],
  }))
  questionAnswerSection: {
    sectionTitle: string,
    questions: { label: string, text: string }[],
  }

  @Prop(raw({
    sectionTitle: String,
    subtitle: String,
    steps: [{ title: String, body: String }],
  }))
  stepByStepSection: {
    sectionTitle: string,
    subtitle: string,
    steps: { title: string, body: string }[],
  }

  @Prop(raw({
    sectionTitle: String,
    subtitle: String,
    phone: String,
    email: String,
    methodOfCommunication: [{ type: String, url: String }],
  }))
  contactsSection: {
    sectionTitle: string,
    subtitle: string,
    phone: string,
    email: string,
    methodOfCommunication: { type: string, url: string }[],
  }

  @Prop(raw({
    description: String,
  }))
  preFooterSection: {
    description: string,
  }

  @Prop(raw({
    sectionTitle: String,
    feedback: [{ type: Types.ObjectId, ref: 'Feedback' }]
  }))
  feedbackSection: {
    sectionTitle: string,
    feedback: [Feedback]
  }

  @Prop(raw({
    sectionTitle: String,
    portfolio: [{ type: Types.ObjectId, ref: 'Portfolio' }]
  }))
  portfolioSection: {
    sectionTitle: string,
    portfolio: [Portfolio]
  }
}

export const HomepageSchema = SchemaFactory.createForClass(Homepage);



src/homepage/homepage.service.ts:26:5 - error TS2322: Type 'Homepage' is not assignable to type 'HomepageDto'.
The types of 'firstSection.logo' are incompatible between these types.
Type 'File' is not assignable to type 'string'.

26 return await this.homepageModel.findOne(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
27 {},
~~~~~~~~~
...
30 .populate('feedbackSection.feedback portfolioSection.portfolio')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 .exec();
~~~~~~~~~~~~~~

src/homepage/homepage.service.ts:39:9 - error TS2769: No overload matches this call.
The last overload gave the following error.
Type 'UpdateFirstSectionDto' is not assignable to type '{ logo: File; slogan: string; title: string; subtitle: stri
ng; buttonMoreText: string; }'.
Types of property 'logo' are incompatible.
Type 'string' is not assignable to type 'File'.

39 { firstSection: updateFirstSectionDto },
~~~~~~~~~~~~

src/homepage/schemas/homapage.schema.ts:16:3
16 firstSection: {
~~~~~~~~~~~~
The expected type comes from property 'firstSection' which is declared here on type 'MongooseUpdateQuery age, "firstSection" | "detailsSection" | "canIHelpSection" | "questionAnswerSection" | "stepByStepSection" | "contactsS
ection" | "preFooterSection" | "feedbackSection" | "portfolioSection" | "_id">>'
node_modules/@types/mongoose/index.d.ts:3546:5
3546 findOneAndUpdate(conditions: FilterQuery, update: UpdateQuery,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3547 options: QueryFindOneAndUpdateOptions,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3548 callback?: (err: any, doc: T | null, res: any) => void): DocumentQuery & Quer
yHelpers;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~
The last overload is declared here.

src/homepage/homepage.service.ts:44:5 - error TS2322: Type '{ logo: File; slogan: string; title: string; subtitle: stri
ng; buttonMoreText: string; }' is not assignable to type 'FirstSectionDto'.

44 return updatedDocument.firstSection;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[12:13:40] Found 3 errors. Watching for file changes.



Репозиторий
  • Вопрос задан
  • 468 просмотров
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
ругается потому что у вас logo в одном месте описано как File, в другом как string. очевидно что это разные вещи и он правильно делает что ругается.
разберитесь с этим для начала, потом можно будет думать дальше, если будут еще какие-то проблемы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы