reactjs - React with TypeScript:使用键的类型从通用对象数组中获取道具
问题描述
我正在尝试定义一个通用组件,该组件传递一个包含两个键的对象列表:component
& props
。我想推断props
使用传递的组件类型的类型。
我到目前为止是这样的:
import React from 'react';
type ComposableComponentDefinition<C extends React.ComponentType = React.ComponentType> = {
component: C;
props: React.ComponentProps<C>;
};
const Compose: React.FC<ComposeProps> = ({ children, components = [] }) => {
return (
<>
{components.reduceRight((acc, c) => {
const Component = typeof c === 'function' ? c : c.component;
const props = (typeof c === 'object' && c.props) || {};
return <Component {...props}>{acc}</Component>;
}, children)}
</>
);
};
Compose.displayName = 'Compose';
export type ComposeProps = {
components: ComposableComponentDefinition[];
};
export default Compose;
我使用它如下:
<Compose
components={[
{ component: SomeComponent, props: { } },
{ component: AnotherComponent, props: anotherComponentProps },
]}
>
问题是,我不能让 TypeScript 编译器为我提供道具推断!即使我相信它拥有这样做所需的所有信息。
有人已经偶然发现了这种问题吗?
解决方案
推荐阅读
- javascript - 为什么在 catch 块内的代码完成之前对 then 块内的代码进行评估
- node.js - 如何使用node.js从具有相同名称的数据库中获取最新插入的记录
- python - 当列大于 0 时,如何对重置为 0 的列求和?
- javascript - 如何使用 NodeJs 或 React 查看 Stripe Invoice PDF
- react-native - React.forwardRef 的问题。null 不是对象(评估'ref.current.focus')
- amazon-web-services - 解决每个任务定义限制的 AWS ECS Fargate 10 容器
- python - 计算 pandas 数据框子集的元素均值
- elasticsearch - 我想将无痛脚本查询转换为 java1.8 和 RestHighLevelClient
- node.js - 无法在 Node Express 中删除 x-powered-by 标头
- mongodb - 是否可以使用 esp8266 将数据发送到 mongodb 集群?