类自指的问题

时间:2019-03-02 15:53:29

标签: typescript redux redux-saga

我不确定如何构建以下问题。我正在寻求设计建议或有关如何解决此问题的见识。

我有一个奇怪的问题,循环引用问题涉及一个类,该类需要引用基于其所属类定义的成员。用代码显示可能比用单词显示更容易:

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”或类似的类型。但我也不想再看到此错误。如何组织这些声明以避免错误?

0 个答案:

没有答案