我正在使用 Typescript 为我的 React 项目编写一个高阶组件,它基本上是一个函数,它接受一个 React 组件作为参数并返回一个围绕它的新组件。
然而,正如预期的那样,TS 抱怨“导出函数的返回类型具有或正在使用私有名称“匿名类”。
有问题的功能:
export default function wrapperFunc <Props, State> (
WrappedComponent: typeof React.Component,
) {
return class extends React.Component<Props & State, {}> {
public render() {
return <WrappedComponent {...this.props} {...this.state} />;
}
};
}
该错误是合理的,因为包装函数的返回类未导出,并且其他module导入此函数无法知道返回值是什么。但是我不能在此函数之外声明返回类,因为它需要将组件传递包装到外部函数。
typeof React.Component
像下面这样明确指定返回类型的试验确实抑制了这个错误。
具有显式返回类型的相关函数:
export default function wrapperFunc <Props, State> (
WrappedComponent: typeof React.Component,
): typeof React.Component { // <== Added this
return class extends React.Component<Props & State, {}> {
public render() {
return <WrappedComponent {...this.props} {...this.state} />;
}
};
}
但是,我不确定这种方法的有效性。它被认为是解决 TypeScript 中这个特定错误的正确方法吗?(或者我是否在其他地方产生了意想不到的副作用?或者有更好的方法吗?)
(编辑)根据丹尼尔的建议更改引用的代码。