entry
ReactElement と ReactNode と React.FC と JSX.Element の違いがあやふや
#React#TypeScript
React.FC
tsx
const Component: React.FC<Props> = ({ text }) => <h1>{text}</h1>;
React.FunctionComponent の省略バージョン
React.FC<Props> のように props の型をジェネリックで指定できる
返り値は ReactElement<any, any> | null
children は最初から children?: ReactNode で定義されているので省略可
でもオプショナルだし ReactNode は範囲が広すぎるので明示したほうが良さそう
ReactNode
tsx
const Component = ({ text }: Props): React.ReactNode => <h1>{text}</h1>;
ReactChild | ReactFragment | ReactPortal | boolean | null | undefined
色々な型を網羅している。受け入れ範囲が広い。
ReactChild
ReactElement | ReactText
ReactText
string | number
ReactFragment
{} | ReactNodeArray
ReactNodeArray
Array<ReactNode>
[1, 2, 'foo', 'bar'] みたいな配列が返る可能性もある。
ReactPortal
ReactElement { key: string | number | null; children: ReactNode }
ReactElement
tsx
const Component = ({ text }): React.ReactElement => <h1>{text}</h1>;
まとめ
React.ReactElement使っとけば良さそう
参考
参考というか本家の型
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react/index.d.ts