使mapStateToProps与Typescript一起使用的首选方法是什么?

时间:2018-01-02 18:02:08

标签: reactjs typescript redux react-redux

取而代之:

function mapStateToProps(appState: ApplicationState, ownProps: any): MyComponentState {
    ...
    return {
        someObject: someObject,
        isNew: isNew
    };
}

用这个:

function mapStateToProps(appState: ApplicationState, ownProps: any): MyComponentState {
    ...
    return new MyComponentState(someObject, isNew);
}

引发以下错误:

  Connect(MyComponent)中的mapStateToProps()必须返回一个普通对象。   取而代之的是[object Object]。

恕我直言,new CustomPageState()具有提高可读性的好处,能够在需要时调用构造函数逻辑,并且允许一种处理可选参数的好方法,因此感觉这是一种更好的方法(在工作时)打字稿)。

在这种情况下,完成返回普通对象的建议/最佳实践方法是什么?

2 个答案:

答案 0 :(得分:1)

据我了解React / Redux,您的第一个代码段似乎更准确地实现了。 mapStateToProps应该返回您的状态的子集,作为普通对象,以减少开销。返回一个完全构造的状态对象似乎打败了目的。

如果你想在mapStateToProps中保持干净,我会向MyComponentState添加一个返回普通对象的方法。在这种情况下返回MyComponentState类型似乎也是不正确的,因为再次,预期会有一个普通对象。如果您想要一个明确的属性列表,我建议创建一个界面(例如IComponentStateProps)并在您的班级MyComponentState implements IComponentStateProps { ... }

中实现它

答案 1 :(得分:0)

我决定将| any添加到返回类型。

mapStateToProps(appState: ApplicationState, ownProps: any): MyComponentState | any 
{
    ...
    return {
        someObject: someObject,
        isNew: isNew
    };
}

这允许部分对象,正如Greg指出的那样是一个巨大的好处,但也允许visual studio仍然给我代码提示和Typescript来继续。

我希望将来有更好的方法,或者其他人有更好的想法?

我还考虑过使MyComponentState的所有属性都是可选的;然而, 这样做需要在使用这些属性的地方进行更多的真理检查。 由于某些属性确实需要,这条路线也会引入一些编程维护混乱。