我的 typegoose 保存功能不需要 return 类型(NodeJs、typescript、graphql)
my typegoose save function didn't return needed type (NodeJs, typescript, graphql)
我的函数保存一个对象 (在 model.ts 文件中) 由 typegoose 创建应该 return Promise<Todo>
但它 returns 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;
}
谢谢。
对于非官方的 mongoose 类型,await document.save()
没有 return 正确的输入是一个已知问题
-> 这不是 typegoose 的问题,而是 @types/mongoose
解决方法是使用:
await doc.save();
return doc;
(或者在你的情况下直接使用 mongoose 提供的函数 .create
)
PS:这在官方的mongoose类型中没有问题(目前可以用typegoose 8.0.0-beta.x
)
我的函数保存一个对象 (在 model.ts 文件中) 由 typegoose 创建应该 return Promise<Todo>
但它 returns 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;
}
谢谢。
对于非官方的 mongoose 类型,await document.save()
没有 return 正确的输入是一个已知问题
-> 这不是 typegoose 的问题,而是 @types/mongoose
解决方法是使用:
await doc.save();
return doc;
(或者在你的情况下直接使用 mongoose 提供的函数 .create
)
PS:这在官方的mongoose类型中没有问题(目前可以用typegoose 8.0.0-beta.x
)