Я только что наткнулся на проблему циклической зависимости при создании проекта, над которым я работаю: небольшой ORM для учебных целей.
Минимальный проект для воспроизведения проблемы можно найти здесь. Вот еще более простой обзор:
Статья:
import { ManyToMany } from './ManyToMany';
import { Tag } from './Tag';
export class Article {
@ManyToMany(Tag)
tags: Tag[] = [];
}
ManyToMany:
//no imports
export function ManyToMany(entity) {
…
}
Тег:
import { ManyToMany } from './ManyToMany';
import { Article } from './Article';
export class Tag {
@ManyToMany(Article)
articles: Article[] = [];
}
Важно, чтобы код не менялся слишком сильно или вообще, потому что это влияет на DX. Я не хочу, чтобы пользователи этой библиотеки создавали дополнительные хакерские файлы для решения этой проблемы.
Я нашел список обсуждений, но ни одно из них не выглядит элегантным:
- https://medium.com/visual-development/how-to-fix-nasty-circular-dependency-issues-once-and-for-all-in-javascript-typescript-a04c987cf0de
- https://github.com/Microsoft/TypeScript/issues/20361
- Круговые ссылки на типы в TypeScript
- https://spin.atomicobject.com/2018/06/25/circular-dependencies-javascript/
Лучшее решение, которое я смог найти, - использовать шаблон внутреннего модуля. Это и все другие решения - всего лишь приемы и обходные пути к этой проблеме, и на самом деле ни одно из них не решает ее.
Есть ли лучшее, более элегантное решение без создания дополнительных файлов или перемещения кода?
ManyToMany
передается значение, сам объект класса. Он понадобится вам, чтобы принять тип, но я понятия не имею, как это может быть возможно. - person Bergi   schedule 20.10.2019@ManyToMany(() => Tag)
- person Bergi   schedule 20.10.2019