如果您尝试传递一组数字(从 推断data={1,2,3}
)。那么您只需要将 number 作为泛型类型传递给您的Props
. 您需要做更多的映射才能使类型正确匹配。
export interface ListProps<T = unknown> {
data: T[];
render: (item: T) => React.ReactElement;
}
export const GenericListItems = <T extends any>(): React.FC<ListProps<T>> => ({
data,
render
}): any => {
return data.map(render);
};
强烈输入您的列表看起来像
const StringList = GenericListItems<string>();
const NumberList = GenericListItems<number>();
interface JsxClass<P, S> extends React.Component<P, S> {
render(): React.ReactElement<P>[];
}
interface GenericComponentType<P, S> {
new (props: P): JsxClass<P, S>;
}
interface ListProps<T> {
data: T[];
render: (value: T) => any;
}
class List<T> extends React.Component<ListProps<T>, {}> {
render(): React.ReactElement<any>[] {
return this.props.data.map(this.props.render);
}
}
强烈输入您的列表看起来像
const NumberList: GenericComponentType<ListProps<number>, {}> = List;
const StringList: GenericComponentType<ListProps<string>, {}> = List;
这两个(组件类或功能组件)实例都可以以相同的方式使用。
<NumberList
data={[1, 2, 3]}
render={value => <div>{value + 2}</div>}
/>
<StringList
data={["I", "Render", "Strings"]}
render={value => <div>{value}</div>}
/>