0

我的由typegoose创建的对象(在model.ts文件中)的函数保存应该返回Promise<Todo>,但它返回Promise<Document<any, {}>> 并且我有这个错误:

Type 'Document<any, {}>' is missing the following properties from type 'Todo': createdAt, updatedAt, content, isDone

我应该如何纠正这个?

模型 ts

import { getModelForClass } from "@typegoose/typegoose";
import { ObjectId } from "mongodb";

import { Todo } from "../../entities";
import { NewTodoInput } from "./input";

// This generates the mongoose model for us
export const TodoMongooseModel = getModelForClass(Todo);

export default class TodoModel {
  async getById(_id: ObjectId): Promise<Todo | null> {
    // Use mongoose as usual
    return TodoMongooseModel.findById(_id).lean().exec();
  }

  async create(data: NewTodoInput): Promise<Todo> {
    const todo = new TodoMongooseModel(data);

    return todo.save();
  }
}

输入 ts

import { Field, InputType, ID } from "type-graphql";
import { MaxLength, MinLength } from "class-validator";

@InputType()
export class NewTodoInput {
  @Field()
  @MaxLength(300)
  @MinLength(1)
  content: string | undefined;

}

实体待办事项

import { ObjectType, Field } from "type-graphql";
import { prop } from "@typegoose/typegoose";
import { ObjectId } from "mongodb";

@ObjectType()
export class Todo {
  @Field()
  readonly _id!: ObjectId;

  @prop()
  @Field(() => Date)
  createdAt!: Date;

  @prop()
  @Field(() => Date)
  updatedAt!: Date;

  @prop()
  @Field()
  content!: string;

  @prop({ default: false })
  @Field()
  isDone!: boolean;
}

谢谢你。

4

1 回答 1

0

对于非官方的 mongoose 类型,这是一个await document.save()不返回正确类型的已知问题
-> 这不是 typegoose 的问题,而是@types/mongoose

解决方法是使用:

await doc.save();
return doc;

(或者在你的情况下直接使用猫鼬提供的功能.create

PS:这在官方的mongoose类型中是没有问题的(目前可以和typegoose一起使用8.0.0-beta.x

于 2021-05-11T10:11:53.590 回答