【发布时间】:2022-01-16 00:28:30
【问题描述】:
通常,当我创建 TypeScript 应用程序时,我遵循 OOP + 不可变数据哲学。
假设我有两个相互引用的类,A 类和 B 类。
class A {
public readonly item: B;
public constructor (item: B) {
this.item = item;
}
}
class B {
public readonly item: A;
public constructor (item: A) {
this.item = item;
}
}
现在不可能创建A类的实例,因为构造函数中需要B类来实现不变性,而B类需要A类的实例。
需要先创建一个A类和B类的实例,其中item属性设置为undefined,类实例化后分别分配引用。但是这个解决方案会破坏不变性,因为它允许用户覆盖 item 属性。
任何建议的解决方案?
【问题讨论】:
-
我认为不可变的“打结”的唯一方法是推迟评估,这在 JS 中是不可能发生的,除非你用一个返回值的函数替换一个值。也许像this。这能满足你的需求吗? (编辑:看起来 ABOS 的回答正是这样说的)
标签: javascript typescript class immutability readonly