【发布时间】:2021-02-19 05:06:50
【问题描述】:
向 TypeScript 专家寻求帮助,我在尝试将 React 高阶组件 (HOC) 重写为 TS 时遇到了错误。我不确定如何解决这个问题。
“src/withEnv.tsx(15,14): 错误 TS4025: 导出的变量 'withEnv' 已经或正在使用私有名称 'WithEnv'。”
我的代码 -
import * as React from 'react'
import Context from './context'
import hoistNonReactStatic from 'hoist-non-react-statics'
function getDisplayName(WrappedComponent) {
return WrappedComponent.displayName || WrappedComponent.name || 'Component'
}
function defaultEnvToProps(context) {
return {
env: context,
}
}
const withEnv = (mapper) => (Component) => {
class WithEnv extends React.Component {
static displayName: string
render() {
return (
<Context.Consumer>
{(context) => {
const props = Object.assign(
{},
typeof mapper === 'function'
? mapper(context)
: defaultEnvToProps(context),
this.props
)
return <Component {...props} />
}}
</Context.Consumer>
)
}
}
WithEnv.displayName = WithEnv(${getDisplayName(Component)})
hoistNonReactStatic(WithEnv, Component)
return WithEnv
}
export default withEnv
【问题讨论】:
-
您使用的是哪个 TypeScript 版本?另外,你能分享你的
tsconfig.json吗? sn-p 在使用 TypeScript 4.1.2 的 CodeSandbox 的 React Typescript 模板中有效(在将缺少的反引号添加到withEnv.displayName = ...之后)。 -
这里缺少很多信息以便正确输入。
Context的值是什么类型?mapper总是只返回一个env道具,还是有时会返回其他道具? -
这是一个开始:tsplay.dev/4w1z2N 导出导致与github.com/microsoft/TypeScript/issues/6307 相关的问题
标签: reactjs typescript higher-order-components