我正在将Typescript与React / Redux一起使用。
站点访问者可以处于string
或LoggedIn
两种状态之一。我已经相应地构造了状态:
LoggedOut
来自Haskell&Elm,这感觉很自然。从理论上讲,实现不可能访问interface LoggedIn {
token: string,
user: Data.User
}
interface LoggedOut {
isLoading: boolean,
lastAttempFailed: boolean
}
type Store = LoggedIn | LoggedOut
或undefined
数据,因为它们只能访问与组件相关的状态(即,一旦用户登录,组件就无法访问)。访问null
)。
如何将其与LoggedOut.isLoading
集成?我有一个mapStateToProps
组件为我的商店提供产品。我希望某些组件仅接受Provider
或LoggedIn
实例,而不是整个商店。
理想情况下,这将由父组件进行类型检查和传递,例如:
LoggedOut
但是,这很hacky,通过道具穿过商店感觉不习惯。 (此外:这也使得在class PrivateRouteComponent extends React.Component<OwnProps & ConnectedState, any> {
render() {
const { store, component, ...props } = this.props;
const Component = component;
switch (store.type) {
case "LOGGED_IN":
return <Route render={() => <Component store={store as Store.LoggedIn} {...props}/>}/>;
case "LOGGED_OUT":
return <Redirect to="/login"/>;
}
}
}
中使用路由参数非常困难。)
是否有一个很好的类型安全解决方案来解决此问题?干杯
答案 0 :(得分:0)
以下应正确键入检查。不幸的是,我认为react-redux
的{{1}}实用程序的类型定义不能正确支持在connect
中映射的并集类型。
这仍然具有条件渲染,但是我看不出它与在Elm中使用模式匹配有什么不同。
mapStateToProps