【发布时间】:2019-01-29 17:34:42
【问题描述】:
我有一个通用的 React 组件,像这样说:
class Foo<T> extends React.Component<FooProps<T>, FooState> {
constructor(props: FooProps<T>) {
super(props);
render() {
return <p> The result is {SomeGenericFunction<T>()}</p>;
}
}
我也有一个与这个类似的 HOC(但没那么无意义):
export const withTd =
<T extends WithTdProps>(TableElement: React.ComponentType<T>): React.SFC<T> =>
(props: T) => <td><TableElement {...props}/></td>;
但是当我使用这样的组件时:
const FooWithTd = withTd(Foo);
没有办法传递类型参数,因为你既不能做withTd(Foo<T>),也不能做FooWithTd,类型总是错误的。
这样做的正确方法是什么?
编辑:问题是我希望稍后能够拥有类似 <FooWithTd<number> {...someprops}/> 的东西,因为我不知道 HOC 中 T 的所需类型。
【问题讨论】:
-
可以进行编辑,但是您的
withTd函数将React.ComponentType<T>作为参数,因此如果您想传递构造函数Foo<U>则 T 必须扩展 FooProps 或 WithTdProps 必须是可分配的到 FooProps
标签: reactjs typescript generics higher-order-components