The correct type for a functional component is React.FunctionComponent or React.FC which is a shortcut alias for it
import React, { FC } from 'react';
const getTabContent: FC = () => {
switch (tab) {
case 1:
return <Images images={images} onSelect={onSelect}/>;
default:
return <Search onSelect={onSelect}/>;
}
};
The FC type simply add the children property to the props argument of the functional component so you can access it:
const SomeComponent: FC = ({ children }) => (
<div className="hello">{children}</div>
);
FC is a generic type so you can "add" props to your component:
interface SomeComponentProps {
foo: string;
}
const SomeComponent: FC<SomeComponentProps> = ({ children, foo }) => (
<div className={`Hello ${foo}`}>{children}</div>
);
Edit: React 18 update
Since React 18, FC doesn't add the children prop implicitly and offers an explicit way to do so with the PropsWithChildren generix type
Example:
type SomeComponentProps = { a: string };
const SomeComponent: FC<SomeComponentProps> = ({ a }) => <div>{a}</div>;
// This will fail when using the following expression
<SomeComponent>Hey I'm a child</SomeComponent>
Usage with children:
type ComponentWithChildrenProps = PropsWithChildren<{ a: string }>;
const ComponentWithChildrenProps: FC<ComponentWithChildrenProps> = ({
a,
children
}) => <div>{a} and {children}</div>
This allows to have a children prop a bit stricter. e.g.
type StrictCompProps = { children: string };
const StrictComp: FC<StrictCompProps> = ({ children }) => <div>{children}</div>;
// This will fail
<StrictComp><span>hey</span></StrictComp>
React.Component?