我不确定如何构建以下问题。我正在寻求设计建议或有关如何解决此问题的见识。
我有一个奇怪的问题,循环引用问题涉及一个类,该类需要引用基于其所属类定义的成员。用代码显示可能比用单词显示更容易:
class FxRateReducer extends ImmerReducer<ContainerState>
implements IActions {
// Each function on this class is a redux action
// This struct defines the redux actions for each function
// We use this struct so one redux action here can trigger
// the next.
static actions: ActionCreators<typeof FxRateReducer>;
*beginUpdateFxRate() {
// The following can -sometimes- throw a typescript
// because actions contains no definition of updateFxRate
const type = FxRateReducer.actions.updateFxRate.type,
}
updateFxRate(newRate: FXRate): void {
Object.assign(this.draftState, newRate);
}
}
//////////////////////////////////////////////////////////////////////////
const actions = createActionCreators(FxRateReducer);
FxRateReducer.actions = actions;
这是基于出色的浸入减少器项目而进行的,需要进行一些调整以方便使用saga。 immer-reducer项目根据createActionCreators函数中类上的方法自动创建redux动作。
使用传奇时,我无法直接调用其他函数,而是需要通过调用关联的redux动作来触发它们。这意味着从beginUpdateFxRate开始,我需要访问createActionCreators生成的stuct,只能在声明该类之后调用它。
生成的JavaScript似乎从来没有问题,但是TypeScript编译器有时会抛出未定义actions.updateFxRate的错误。我的猜测是,在完全重新编译时,动作是在类声明之前进行编译的,因此它的类型缺少函数声明。
我尝试了各种方法来解决此问题。我真的很喜欢在类本身上执行操作,而某些编译器错误并不经常出现,因此我希望将其保留在那里。我也喜欢输入信息,所以我不热衷于将其类型更改为“ any”或类似的类型。但我也不想再看到此错误。如何组织这些声明以避免错误?