使用 mikro-orm 和打字稿创建 class 实例并插入到 postgresql 数据库时出现问题
Issue in creating a class instance using mikro-orm and typescript and inserting into postgresql database
我正在尝试编写代码 React GraphQL TypeScript tutorial
该项目使用 MikroOrm 与 PostgreSQL 数据库进行通信。
目标:创建 post 的实例并将其插入数据库。
目前我在第 19.53 分钟遇到了视频中没有出现的以下错误,我不确定为什么。
Post.ts 文件:
@Entity() //correspond to database table.
export class Post {
@PrimaryKey()
id!: number;
@Property({ type: 'date'}) //denote database column, without it its just a class attribute
createdAt = new Date();
@Property({ type: 'date', onUpdate: () => new Date() })
updatedAt = new Date();
@Property({type: 'text'})
title!: string;
}
Index.ts 文件:
const main = async () => {
const orm = await MikroORM.init(microConfig);
const post = orm.em.create(Post, {title: "my first post" }); //create instance of post
await orm.em.persistAndFlush(post); //insert into database
}
Index.ts 中的行向我抛出一个错误:
const post = orm.em.create(Post, {title: "my first post" });
Argument of type '{ title: string; }' is not assignable to parameter of type 'RequiredEntityData<Post>'.
Type '{ title: string; }' is missing the following properties from type '{ createdAt: EntityDataItem<Date>; updatedAt: EntityDataItem<Date>; title: EntityDataItem<string>;
您需要通过 OptionalProps
符号标记具有初始值设定项的属性,使它们对于 em.create()
方法是可选的。此外,您可以直接指定类型而不是显式 type
选项(推理不适用于 reflect-metadata)。
这是一个应该可以正常工作的实体定义:
@Entity()
export class Post {
[OptionalProps]?: 'createdAt' | 'updatedAt';
@PrimaryKey()
id!: number;
@Property()
createdAt: Date = new Date();
@Property({ onUpdate: () => new Date() })
updatedAt: Date = new Date();
@Property({ type: 'text' })
title!: string;
}
我刚刚偶然发现了这个错误,这就是我解决它的方法。该错误基本上是说您需要在创建参数上设置 updatedAt
和 createdAt
。所以这里的实体应该是:
import { Entity, PrimaryKey, Property } from "@mikro-orm/core";
@Entity()
export class Post {
@PrimaryKey()
id!: number;
@Property()
createdAt?: Date = new Date();
@Property({ onUpdate: () => new Date() })
updatedAt?: Date = new Date();
@Property()
title!: string;
}
您需要添加“?”在 createdAt
和 updatedAt
之后,因此它们被识别为可选属性。
我正在尝试编写代码 React GraphQL TypeScript tutorial
该项目使用 MikroOrm 与 PostgreSQL 数据库进行通信。
目标:创建 post 的实例并将其插入数据库。
目前我在第 19.53 分钟遇到了视频中没有出现的以下错误,我不确定为什么。
Post.ts 文件:
@Entity() //correspond to database table.
export class Post {
@PrimaryKey()
id!: number;
@Property({ type: 'date'}) //denote database column, without it its just a class attribute
createdAt = new Date();
@Property({ type: 'date', onUpdate: () => new Date() })
updatedAt = new Date();
@Property({type: 'text'})
title!: string;
}
Index.ts 文件:
const main = async () => {
const orm = await MikroORM.init(microConfig);
const post = orm.em.create(Post, {title: "my first post" }); //create instance of post
await orm.em.persistAndFlush(post); //insert into database
}
Index.ts 中的行向我抛出一个错误:
const post = orm.em.create(Post, {title: "my first post" });
Argument of type '{ title: string; }' is not assignable to parameter of type 'RequiredEntityData<Post>'.
Type '{ title: string; }' is missing the following properties from type '{ createdAt: EntityDataItem<Date>; updatedAt: EntityDataItem<Date>; title: EntityDataItem<string>;
您需要通过 OptionalProps
符号标记具有初始值设定项的属性,使它们对于 em.create()
方法是可选的。此外,您可以直接指定类型而不是显式 type
选项(推理不适用于 reflect-metadata)。
这是一个应该可以正常工作的实体定义:
@Entity()
export class Post {
[OptionalProps]?: 'createdAt' | 'updatedAt';
@PrimaryKey()
id!: number;
@Property()
createdAt: Date = new Date();
@Property({ onUpdate: () => new Date() })
updatedAt: Date = new Date();
@Property({ type: 'text' })
title!: string;
}
我刚刚偶然发现了这个错误,这就是我解决它的方法。该错误基本上是说您需要在创建参数上设置 updatedAt
和 createdAt
。所以这里的实体应该是:
import { Entity, PrimaryKey, Property } from "@mikro-orm/core";
@Entity()
export class Post {
@PrimaryKey()
id!: number;
@Property()
createdAt?: Date = new Date();
@Property({ onUpdate: () => new Date() })
updatedAt?: Date = new Date();
@Property()
title!: string;
}
您需要添加“?”在 createdAt
和 updatedAt
之后,因此它们被识别为可选属性。