OptionalProps in Mikro-orm



我正在尝试如何定义其他可选属性。

import { Entity, PrimaryKey, Property, OptionalProps } from '@mikro-orm/core';
@Entity()
export abstract class BaseEntity {
[OptionalProps]?: 'createdAt';
@PrimaryKey()
id: number;
@Property()
createdAt: Date = new Date();
}
@Entity()
export class EntityA extends BaseEntity {
[OptionalProps]?: 'isAnotherProperty'; // This is the bit I cannot figure out
@Property()
isAnotherProperty: boolean = false;
}

使用上述 TypeScript 会抛出错误:

Property '[OptionalProps]' in type 'EntityA' is not assignable to the same property in base type 'BaseEntity'.

基本上我的BaseEntity具有可选属性,EntityA也是如此。我可以从BaseEntity中删除[OptionalProps]?:并在EntityA[OptionalProps]?: 'createdAt' | 'isAnotherProperty';,但是我的许多实体不需要除createdAt之外的任何其他可选属性,因此如果我可以在需要的地方"扩展"它,我宁愿不必在每个实体类中复制[OptionalProps]?: 'createdAt';

是否可以附加或覆盖[OptionalProps]

可能最干净的方法是通过基本实体上的类型参数:

import { Entity, PrimaryKey, Property, OptionalProps } from '@mikro-orm/core';
@Entity()
export abstract class BaseEntity<Optional = never> {
[OptionalProps]?: Optional | 'createdAt';
@PrimaryKey()
id: number;
@Property()
createdAt: Date = new Date();
}
@Entity()
export class EntityA extends BaseEntity<'isAnotherProperty'> {
@Property()
isAnotherProperty: boolean = false;
}