Возможно, сначала нам придется преобразовать ChildComponent в компонент generi c. Это будет выглядеть примерно так:
interface ChildComponentProps<T = unknown> {
source: T
}
function ChildComponent<T extends any>(props: ChildComponentProps<T>) {
return (
<div>...</div>
)
}
Теперь мы используем этот компонент, предоставляя тип для его источника. Примерно так:
interface AppProps {
// your app's props
}
type FullNameProps = {
name: string;
last: string;
}
const App: React.FC<AppProps> = (props) => {
const fullName: FullNameProps = {
name: "John",
last: "Doe",
}
return (
<div>
<ChildComponent<FullNameProps>
source={fullName}
/>
</div>
)
}
Это должно сработать. Также рекомендуется предоставить метод рендеринга вашему дочернему компоненту для рендеринга значения, переданного в источнике.
Весь пример с включенной функцией рендеринга :
interface AppProps {
// your app's props
}
type FullNameProps = {
name: string;
last: string;
}
const App: React.FC<AppProps> = (props) => {
const fullName: FullNameProps = {
name: "John",
last: "Doe",
}
const renderItem = (item: FullNameProps) => {
return (
<h1>
{item.name} {item.last}
</h1>
)
}
return (
<div>
<ChildComponent<FullNameProps>
source={fullName}
renderItem={renderItem}
/>
</div>
)
}
interface ChildComponentProps<T = unknown> {
source: T
renderItem: (item: T) => JSX.Element
}
function ChildComponent<T extends any>(props: ChildComponentProps<T>) {
return (
<div>
{props.renderItem(props.source)}
</div>
)
}
Надеюсь, это поможет!