如何在 mikro-orm 中正确指定/使用 postgres 文本类型?

How to properly specify / work with postgres text type in mikro-orm?

我有一个存储序列化 json 字符串的实体。我最初将它声明为 string 类型,但当它超过 255 个字符时开始出现错误。 Postgres 说它应该声明为 text 类型,所以我引用了 MIKRO-ORM docs 并看到它们有一个 text: TextType 自定义类型。

我更新了我的实体,并手动更改了我的数据库类型,因为迁移没有接受更改,但是 Typescript 不喜欢新的更改,因为它试图将序列化的 json 字符串存储到文本类型产生 Argument of type 'string' is not assignable to parameter of type 'TextType' 错误。

我在截止日期前,所以我只是在上面放了一个 ts-ignore 声明,但我想弄清楚我做错了什么。我不清楚文档,谷歌搜索没有产生任何好处。

也许有人对此有所了解?

import { TextType } from '@mikro-orm/core';

@Entity()
export class Event {
  ...

  @Property({ nullable: true })
  meta: TextType;

  ...

  constructor(
    ...
    meta?: TextType,
  ) {
    ...
    this.meta = meta || null;
  }
}

提前致谢!

所以仔细查看文档让我看到了我所缺少的东西。

import { Property, types } from '@mikro-orm/core';

@Property({ type: types.text, nullable: true })
meta?: string; 

本来应该是一个字符串,但是在装饰器中,我需要传递types.text。

我猜这是截止日期的问题,你错过了一些显而易见的事情。

您混淆了两件事 - TS 属性 类型,这是您的运行时值将被映射到的类型 - 它仍然是 string - 以及将使用的映射类型处理值并定义数据库列类型 - 即 TextType.

您链接的文档页面描述了 t 变量,它是所有提供的映射类型的映射,它只是描述了您可以用作别名的内容。以下所有内容都应该相同(请注意,我还在 TS 级别上将 属性 设为可选,因为您希望将其标记为可为空)。

@Property({ type: TextType, nullable: true })
meta?: string;
@Property({ type: t.text, nullable: true })
meta?: string;
@Property({ type: 'text', nullable: true })
meta?: string;