Правильное использование IdentifiedReference и {wrappedReference: true}
На этом я не заканчиваю понимать это и не хочу загрязнять исходную проблему. нужно использовать всегда{ wrappedReference: true }
с IdentifiedReference
?
Потому что это не удается:
@Entity({ collection: "account" })
export class AccountEntity implements IdEntity<AccountEntity> {
@PrimaryKey()
public id!: number;
@OneToOne(() => ArtistEntity, "account", { wrappedReference: true })
public artist!: IdentifiedReference<ArtistEntity>;
}
@Entity({ collection: "artist" })
export class ArtistEntity implements IdEntity<ArtistEntity> {
@PrimaryKey()
public id!: number;
@OneToOne(() => AccountEntity, { wrappedReference: true })
public account!: IdentifiedReference<AccountEntity>;
}
с:
src / entity /artistEntity.ts(15,38): ошибка TS2345: аргумент типа '{ wrappedReference: boolean; }'не может быть назначен параметру типа'"id" | "имя" | "пароль" | "электронная почта" | "изображение" | "художник" | "коллекции" | "студии" | ((e: AccountEntity) => любой) | undefined'. Литерал объекта может указывать только известные свойства, а "wrappedReference" не существует в типе "(e: AccountEntity) => any".
Итак, это было бы правильно?
@Entity({ collection: "account" })
export class AccountEntity implements IdEntity<AccountEntity> {
@PrimaryKey()
public id!: number;
@OneToOne(() => ArtistEntity, "account", { wrappedReference: true })
public artist!: IdentifiedReference<ArtistEntity>;
}
@Entity({ collection: "artist" })
export class ArtistEntity implements IdEntity<ArtistEntity> {
@PrimaryKey()
public id!: number;
@OneToOne(() => AccountEntity)
public account!: IdentifiedReference<AccountEntity>;
}
1 ответ
Проблема в том, что вы пытаетесь использовать второй параметр @OneToOne
декоратор для объекта параметров, но в настоящее время поддерживается только для первого или третьего параметра
// works if you use the default `TsMorphMetadataProvider`
@OneToOne()
public account!: IdentifiedReference<AccountEntity>;
// use first param as options
@OneToOne({ entity: () => AccountEntity, wrappedReference: true })
public account!: IdentifiedReference<AccountEntity>;
// use third param as options
@OneToOne(() => AccountEntity, undefined, { wrappedReference: true })
public account!: IdentifiedReference<AccountEntity>;
// you can also do this if you like
@OneToOne(() => AccountEntity, 'artist', { owner: true, wrappedReference: true })
public account!: IdentifiedReference<AccountEntity>;
Но это изменится до финальной версии v3, поэтому, если вы будете использовать TsMorphMetadataProvider
(по умолчанию), он всегда будет работать даже без явного wrappedReference: true
.
Вот проблема, на которую вы можете подписаться в связи с предстоящим изменением: https://github.com/mikro-orm/mikro-orm/issues/265
(речь идет о допустимости значения NULL, но это еще один побочный эффект этого изменения)