Возможно ли иметь компонент React, который может динамически определять, какие реквизиты у него есть?
Пример:
type BaseType = {
baseProp?: ...
as?: ...
}
type Extended = {
extendedProp?: ...
}
<Base /> // expected props => { baseProp }
<Base as = {ExtendedComponent} extendedProp = {...} /> // expected props => { baseProp, extendedProp }





Взяв пример из ответа это, мы можем, используя пересечения, сначала вывести тип реквизита из as, а затем использовать эти реквизиты для проверки любых дополнительных свойств:
type BaseType = {
baseProp?: number
}
type Extended = {
extendedProp?: string
}
declare const ExtendedComponent: React.FC<Extended>
function Base<T = {}>(p: BaseType & { as? : React.ComponentType<T>} & T): React.ReactElement{
if (p.as) {
const Child = p.as;
return <div>{p.baseProp}<Child {...p as T}></Child></div>
}else {
return <div>{p.baseProp}</div>
}
}
let s = <Base /> // expected props => { baseProp }
let a = <Base as = {ExtendedComponent} extendedProp = "a" />
Вау... пытался добиться этого часами... :D. Думал, что есть решение, так как это можно обработать во время компиляции. Большое спасибо!