Я только что наткнулся на проблему циклических зависимостей при создании проекта, над которым я работаю: небольшой ORM, для целей обучения.
Минимальный проект для воспроизведения проблемы можно найти здесь ,Вот еще более простой обзор:
Артикул :
import { ManyToMany } from './ManyToMany';
import { Tag } from './Tag';
export class Article {
@ManyToMany(Tag)
tags: Tag[] = [];
}
ManyToMany :
//no imports
export function ManyToMany(entity) {
…
}
Tag :
import { ManyToMany } from './ManyToMany';
import { Article } from './Article';
export class Tag {
@ManyToMany(Article)
articles: Article[] = [];
}
Важно, чтобы код не менялся слишком сильно или не изменялся вообще, потому что это влияет на DX. Я не хочу, чтобы пользователи этой библиотеки создавали дополнительные хакерские файлы для решения этой проблемы.
Я нашел список обсуждений, но ни одно из них не является элегантным:
Лучшее решение, которое яможно найти, используя шаблон внутреннего модуля. Это и все другие решения - всего лишь способы решения этой проблемы, и ни одно из них на самом деле не решает ее.
Есть ли лучшее, более элегантное решение без создания дополнительных файлов или перемещения кода?