错误 TS2740 类型 'DeepPartial<Quiz>[]' 缺少类型 'Question' 的以下属性:id、question、hasId、save 和另外 4 个

error TS2740 Type 'DeepPartial<Quiz>[]' is missing the following properties from type 'Question': id, question, hasId, save, and 4 more

我不知道如何修复这个错误。有谁知道我需要修复什么才能使此代码正常工作?

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { CreateQuestionDto } from './dto/create-question.dto';
import { Question } from './question.entity';
import { QuestionRepository } from './question.repository';

@Injectable()
export class QuestionService {
  constructor(
    @InjectRepository(QuestionRepository)
    private questionRepository: QuestionRepository,
  ) {}

  async createQuestion(question: CreateQuestionDto): Promise<Question> {
    return await this.questionRepository.save(question);
  }
}

Returns 出现如下错误:

src/modules/quiz/question.service.ts:15:5 - 错误 TS2740:类型 'DeepPartial[]' 缺少类型 'Question' 中的以下属性:id、问题、hasId、保存, 还有 4 个。

15 return await this.questionRepository.save(问题); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~

src/modules/quiz/question.service.ts:15:47 - 错误 TS2769:没有重载匹配此调用。 重载 1 of 4,'(entities: DeepPartial[], options?: SaveOptions): Promise<(DeepPartial & Quiz)[]>',出现以下错误。 'CreateQuestionDto' 类型的参数不可分配给 'DeepPartial[]' 类型的参数。 类型 'CreateQuestionDto' 缺少类型 'DeepPartial[]' 的以下属性:length、pop、push、concat 和另外 29 个。 重载 2 of 4,'(entity: DeepPartial, options?: SaveOptions): Promise',出现以下错误。 类型 'CreateQuestionDto' 与类型 'DeepPartial'.

没有共同的属性

15 return await this.questionRepository.save(问题);

问题实体:

import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity('questions')
export class Question extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: string;

  @Column({
    type: 'varchar',
  })
  question: string;
}

问题库:

import { EntityRepository, Repository } from 'typeorm';
import { Quiz } from './quiz.entity';

@EntityRepository(Quiz)
export class QuestionRepository extends Repository<Quiz> {}

创建问题 dto:

import { IsNotEmpty, Length } from 'class-validator';

export class CreateQuestionDto {
  @IsNotEmpty()
  @Length(3, 255)
  question: string;
}

问题库:

import { EntityRepository, Repository } from 'typeorm';
import { Quiz } from './quiz.entity';

@EntityRepository(Quiz)
export class QuestionRepository extends Repository<Quiz> {}

问题是您的 QuestionRepository 指向另一个实体 (Quiz)。

改为:

export class QuestionRepository extends Repository<Question> {}

这样你就可以避免 any 子句并直接在 save 调用中使用 dto。

  async createQuestion(question: CreateQuestionDto): Promise<Question> {
    return await this.questionRepository.save(question);
  }