在我们的应用程序中,我们使用i18next(公开HOC withNamespaces
)和material-ui(公开HOC withStyles
),并且必须使用打字稿。有些组件需要翻译和样式,因此它们具有诸如
interface MyCompProps extends WithStyles, WithNamespaces {
// actually relavent props here
}
并与两个HOC一起导出
export default withStyles(styles, { withTheme: true })(withNamespaces()(MyComp as any)) as typeof MyComp;
这有一些问题,例如:
as any
,as typeof MyComp
)才能正常工作,否则我们将遇到类型错误。有时我们在投射后仍然会遇到类型错误。如果我们有普通的JS,我会写
export default compose(
withStyles(styles, { withTheme: true }),
withNamespaces()
)(MyComp)
但是在TS中,此函数返回一个{}
而不是一个typeof MyComp
(没有WithStyles和WithNamespaces),正如我所期望的那样。
我可以强制将其设置为typeof MyComp
,但随后使用此组件会抱怨我没有为WithStyles
和WithNamespaces
设置字段。
如何组成这些HOC,以便正确生成结果类型?
据我了解,结果类型应为ComponentClass<MyCompProps>
,且不包含WithStyles
和WithNamespaces
字段。