gpt4 book ai didi

javascript - 完美修复 Javascript/Typescript 中的循环依赖问题

转载 作者:行者123 更新时间:2023-11-30 06:11:48 24 4
gpt4 key购买 nike

我只是在构建我正在从事的项目时偶然发现了循环依赖问题:一个小型 ORM,用于学习目的。

可以找到重现问题的最小项目here .这是一个更简单的概述:

文章:

import { ManyToMany } from './ManyToMany';
import { Tag } from './Tag';

export class Article {
@ManyToMany(Tag)
tags: Tag[] = [];
}

多对多:

//no imports
export function ManyToMany(entity) {

}

标签:

import { ManyToMany } from './ManyToMany';
import { Article } from './Article';

export class Tag {
@ManyToMany(Article)
articles: Article[] = [];
}

重要的是不要对代码进行过多更改或根本不更改,因为这会影响 DX。我不希望这个库的用户创建额外的 hacky 文件来解决这个问题。

我找到了一个讨论列表,但没有一个是优雅的:

我能找到的最佳解决方案是使用内部模块模式。这个和所有其他解决方案都只是针对此问题的黑客攻击和变通方法,并没有真正解决它。

有没有更好、更优雅的解决方案,无需创建额外的文件或移动代码?

最佳答案

根据 Bergi 的评论,可行的解决方案是使引用惰性化,即传递一个返回实体的函数并且不立即对其求值(在属性修饰期间),但稍后在加载所有模块时,初始化类,并且正在创建第一个实例。

我尝试实现相同的 https://stackblitz.com/edit/typescript-f5rm9u这里。请检查实现情况。

多对多

export function ManyToMany(entity=() => entity) {
return function(target, name) {
console.log(entity.name);
};
}

回答来源:@Bergi

关于javascript - 完美修复 Javascript/Typescript 中的循环依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com