是否有任何 TypeScript 解决方案,可以帮助我拥有“无限”数量的泛型类型,而不必键入所有类型,当然?
示例如下:
type Args<T extends React.ComponentType<any>> = { component: T, presetProps: React.ComponentProps<T>};
function buildComponents<T extends React.ComponentType<any>>(...args: Args<T>[] ) : any
function componentJ({name, age}: {name: string, age: number}){
return <h1>123</h1>
}
function componentI({ age}: { age: number}){
return <h1>123</h1>
}
buildComponents({component:componentJ, presetProps:{name: "Jon", age: 12}},
{component: componentI, presetProps:{age: 44}})
Run Code Online (Sandbox Code Playgroud)
使用此代码,我在 上出错{component: componentI, presetProps:{age: 44}}
,因为它错过了name
,但我希望它从 中获取类型,componentI
而不是从 中获取类型componentJ
,就是这种情况。
我的目的是从给定的 JSX 元素中提取 props,这可能吗?
这几乎是我失败的尝试......提前感谢您的帮助;)
function getComponentProps<T extends React.ReactElement>(element: T): ExtractProps<T>;
function Component({ name }: { name: string }) {
return <h1>{name}</h1>;
}
type ExtractProps<TComponentOrTProps> = TComponentOrTProps extends React.ComponentType<infer TProps>
? TProps
: TComponentOrTProps;
const componentProps = getComponentProps(<Component name="jon" />); //type is JSX.Element
Run Code Online (Sandbox Code Playgroud) jsx typescript reactjs typescript-generics typescript-typings