Thanks all for the answers. They are correct but I was looking for a more detailed version. I did some more research and found this on React+TypeScript Cheatsheets on GitHub.

Function Components
These can be written as normal functions that take a props argument and return a JSX element.

type AppProps = { message: string }; /* could also use interface */

const App = ({ message }: AppProps) => <div>{message}</div>;

What about React.FC/React.FunctionComponent? You can also write components with React.FunctionComponent (or the shorthand React.FC):

const App: React.FC<{ message: string }> = ({ message }) => (
  <div>{message}</div>
);

Some differences from the "normal function" version:

It provides typechecking and autocomplete for static properties like displayName, propTypes, and defaultProps - However, there are currently known issues using defaultProps with React.FunctionComponent. See this issue for details - scroll down to our defaultProps section for typing recommendations there.

It provides an implicit definition of children (see below) - however there are some issues with the implicit children type (e.g. DefinitelyTyped#33006), and it might be considered a better style to be explicit about components that consume children, anyway.

const Title: React.FunctionComponent<{ title: string }> = ({
  children,
  title
}) => <div title={title}>{children}</div>;

In the future, it may automatically mark props as readonly, though that's a moot point if the props object is destructured in the parameter list.

React.FunctionComponent is explicit about the return type, while the normal function version is implicit (or else needs additional annotation).

In most cases, it makes very little difference which syntax is used, but the React.FC syntax is slightly more verbose without providing clear advantage, so precedence was given to the "normal function" syntax.

Answer from Kuldeep Bora on Stack Overflow
Top answer
1 of 5
217

Thanks all for the answers. They are correct but I was looking for a more detailed version. I did some more research and found this on React+TypeScript Cheatsheets on GitHub.

Function Components
These can be written as normal functions that take a props argument and return a JSX element.

type AppProps = { message: string }; /* could also use interface */

const App = ({ message }: AppProps) => <div>{message}</div>;

What about React.FC/React.FunctionComponent? You can also write components with React.FunctionComponent (or the shorthand React.FC):

const App: React.FC<{ message: string }> = ({ message }) => (
  <div>{message}</div>
);

Some differences from the "normal function" version:

It provides typechecking and autocomplete for static properties like displayName, propTypes, and defaultProps - However, there are currently known issues using defaultProps with React.FunctionComponent. See this issue for details - scroll down to our defaultProps section for typing recommendations there.

It provides an implicit definition of children (see below) - however there are some issues with the implicit children type (e.g. DefinitelyTyped#33006), and it might be considered a better style to be explicit about components that consume children, anyway.

const Title: React.FunctionComponent<{ title: string }> = ({
  children,
  title
}) => <div title={title}>{children}</div>;

In the future, it may automatically mark props as readonly, though that's a moot point if the props object is destructured in the parameter list.

React.FunctionComponent is explicit about the return type, while the normal function version is implicit (or else needs additional annotation).

In most cases, it makes very little difference which syntax is used, but the React.FC syntax is slightly more verbose without providing clear advantage, so precedence was given to the "normal function" syntax.

2 of 5
93

React.FC is not the preferable way to type a React component, here's a link.

I personally use this type:

const Component1 = ({ prop1, prop2 }): JSX.Element => { /*...*/ }

Short list of React.FC cons:

  1. Provides an implicit definition of children, even if your component doesn't need to have children. That might cause an error.
  2. Doesn't support generics.
  3. Doesn't work correctly with defaultProps.
🌐
React TypeScript Cheatsheets
react-typescript-cheatsheet.netlify.app › function components
Function Components | React TypeScript Cheatsheets
These can be written as normal functions that take a props argument and return a JSX element. // Declaring type of props - see "Typing Component Props" for more examples type AppProps = { message: string; }; /* use `interface` if exporting so that consumers can extend */ // Easiest way to declare a Function Component; return type is inferred.
Discussions

React.FC vs React.FunctionComponent
What cheatsheet is this about? (if applicable) Basic cheatsheet What's your issue or idea? Last year some recommendations on using FunctionComponent instead of FC were added to this cheatsheet ... More on github.com
🌐 github.com
7
February 27, 2020
Should we use React.FC to provide type for Components?
I feel like the momentum is moving away from it, but it's still common to see it in use in tutorials and blog posts etc., so it's not definitely wrong. But I prefer to leave it out. More on reddit.com
🌐 r/reactjs
36
46
August 27, 2023
What's the difference between a React.FunctionComponent and a plain JS function component?
Under the hood FunctionComponent ... function component you would have to define it. 2020-10-10T18:56:25.857Z+00:00 ... @JoelMellon in the first code example TypeScript will regard the function as just any normal function, and can "see" from it that it returns a string, which is all fine. In the section example we tell TS that the fuction is a React.FC (which is ... More on stackoverflow.com
🌐 stackoverflow.com
React.FC vs JSX.Element
Per the arguments in this issue, React.FC should generally be avoided: https://github.com/facebook/create-react-app/pull/8177 On top of that, TS infers that your component is already returning a JSX.Element, so you don't even need to declare that return type. Just do function HelloWorld({name}: HWProps) {}, and let TS infer the return type. More on reddit.com
🌐 r/reactjs
85
104
August 6, 2020
🌐
Medium
benhur-martins.medium.com › typing-react-components-react-fc-or-jsx-element-f3972d4000da
Typing React Components: React.FC or JSX.Element? | by Ben Hur | Medium
August 10, 2022 - Probably the most common is using the interface already provided by react: FC, which means Functional Component, if the component accept props we only need to add the prop types on it: FC<MyProps>.
🌐
DEV Community
dev.to › xenoxdev › usage-of-reactfc-from-my-experience-22n7
Usage of `React.FC` from my experience - DEV Community
February 13, 2022 - React.FC is a generic interface for the functional components, one of the two ways to write components in React.
Find elsewhere
🌐
Medium
medium.com › raccoons-group › why-you-probably-shouldnt-use-react-fc-to-type-your-react-components-37ca1243dd13
Why you probably shouldn’t use React.FC to type your React components | by Sam Hendrickx | Raccoons Group | Medium
October 19, 2021 - React.FC or React.FunctionComponent provides an implicit definition of children. This means that when you type your component with React.FC, the component automatically accepts children provided to your component.
🌐
Adeel Imran
adeelhere.com › blog › 2025-10-21-react-fc-vs-standard-function-components-in-react-typescript
React.FC vs Standard Functions: Which Should You Use in 2025? | Adeel Imran
October 22, 2025 - Stick with standard function components. They're simpler, more flexible, and align with modern React development patterns. The only time I might consider React.FC is when working with a legacy codebase that already uses it consistently.
🌐
GitHub
github.com › typescript-cheatsheets › react › issues › 190
React.FC vs React.FunctionComponent · Issue #190 · typescript-cheatsheets/react
February 27, 2020 - What cheatsheet is this about? (if applicable) Basic cheatsheet What's your issue or idea? Last year some recommendations on using FunctionComponent instead of FC were added to this cheatsheet in #104. But seems like things have changed ...
Author   ElForastero
🌐
Medium
medium.com › @bobjunior542 › effortlessly-use-react-fc-with-typescript-best-practices-91aa7fc057c7
Effortlessly Use React FC with TypeScript: Best Practices | by Bob Junior | Medium
April 26, 2023 - Import React and declare FC type To use the React FC, we need to import React and declare the FC type. We can do this with the following code: ... Declare Props interface Next, we need to declare an interface for the props that our FC will receive. This interface will define the shape of the props and their types. For example: interface MyComponentProps { name: string; age: number; } Define FC with Props interface With the Props interface defined, we can now use it to define our FC.
🌐
Flaming Codes
flaming.codes › posts › function components vs react.fc in typescript: a complete guide
Function Components vs React.FC in TypeScript: A Complete Guide
May 29, 2025 - It looks more "official," and if ... with fine print. React.FC (short for React.FunctionComponent) is a helper type that describes a function component....
🌐
GitHub
github.com › just214 › www.tsx.guide › blob › master › docs › function-components › react-fc.mdx
www.tsx.guide/docs/function-components/react-fc.mdx at master · just214/www.tsx.guide
April 29, 2022 - interface FunctionComponent<P = {}> { (props: PropsWithChildren<P>, context?: any): ReactElement | null; propTypes?: WeakValidationMap<P>; contextTypes?: ValidationMap<any>; defaultProps?: Partial<P>; displayName?: string; } You can optionally pass a type argument to FC with your own custom component prop types.
Author   just214
🌐
Chanchan's blog
chanchann.github.io › blog › journal › 2025 › 03 › 31 › react-fc.html
React 02 : Understanding React.FC
March 31, 2025 - React.FC is a TypeScript type used to define function components in React, with the full name being React.FunctionComponent. It provides a type-safe declaration method that allows developers to explicitly specify the props types for components ...
🌐
GitHub
github.com › payloadcms › payload › discussions › 7513
Do not use React.FC · payloadcms/payload · Discussion #7513
Payload source code, examples and documentation use React.FC (and/or friends: React.FunctionComponent, React.FunctionalComponent) Instead of writing: const MyComponent: React.FC = ({ hello }...
Author   payloadcms
🌐
Fettblog
fettblog.eu › typescript-react-why-i-dont-use-react-fc
TypeScript + React: Why I don't use React.FC
August 30, 2020 - React.FC types a function. That’s in its name, function component. Function types are really hard to apply to regularly named functions.
🌐
Harrymt
harrymt.com › blog › 2020 › 05 › 20 › react-typescript-react-fc.html
Should you use React.FC for typing React Components · Harry's Blog
May 20, 2020 - React.FC is useful for beginners getting into typed React components as it guides you with types. But due to unnecessary addition of children, that you normally do not need, you should stay away and simply type like a normal Typescript function.
🌐
Reddit
reddit.com › r/reactjs › should we use react.fc to provide type for components?
r/reactjs on Reddit: Should we use React.FC to provide type for Components?
August 27, 2023 -

I have seen people use React.FC to wrap typed props as it includes children prop. What are the pros and cons of using it?

Top answer
1 of 13
32
I feel like the momentum is moving away from it, but it's still common to see it in use in tutorials and blog posts etc., so it's not definitely wrong. But I prefer to leave it out.
2 of 13
25
Pasting a comment I left on a PR at work that was roughly about this. TL;DR it doesn't matter, but there are some very niche circumstances where using a full function definition is slightly better than an anonymous function component (and therefore React.FC) using export function MyComponent() { ... } is the better way to write components in react. You'll notice that in the official react docs every time they're creating a component they use function rather than an arrow function. The differences are INSANELY subtle and irrelevant 99.9999% of the time, but there are some specific circumstances where using function makes things easier to read: specifically, Errors and when you're memoizing things. Basically, arrow function names are fake, every arrow function is anonymous and its up to your tooling to figure out that the name you gave the constant is what you expect the function to actually be named. If that component errors or is memoized, that name gets swallowed and you end up with an unreadable name. Airbnb specifically points this out in their linter documentation, which is (was?) kind of a de-facto react linting toolset. Additionally, some of the specific function ts types (like FC) make assumptions about what you're going to return that may or may not be correct; using a function definition type makes the return type the actual return of your function, which is safer because it means you will be stopped from using that component inappropriately elsewhere. All of that being said, you can see that basically everywhere (including in CompanyInternalTool) we use the const Component = () => {...} pattern, and its not enforced with a linting rule. You'll have to make up your own mind about which one you want to use, but I couldn't miss this opportunity to proselytize. OP, if the only thing you care about is children being defined you can use propsWithChildren generic provided by react.