diff --git a/docs/basic/getting-started/function-components.md b/docs/basic/getting-started/function-components.md
index 22192b70..ff8662b0 100644
--- a/docs/basic/getting-started/function-components.md
+++ b/docs/basic/getting-started/function-components.md
@@ -12,7 +12,7 @@ const App = ({ message }: AppProps) =>
{message}
;
-What about `React.FC`/`React.FunctionComponent`?
+What about `React.FC`/`React.FunctionComponent`/`React.VoidFunctionComponent`?
You can also write components with `React.FunctionComponent` (or the shorthand `React.FC` - they are the same):
@@ -39,6 +39,44 @@ const Title: React.FunctionComponent<{ title: string }> = ({
}) => {children}
;
```
+
+
+
+As of [@types/react PR #46643](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/46643) (TODO: update with @types/react version when merged), you can use a new `React.VoidFunctionComponent` or `React.VFC` type if you wish to declare the accepted `children` explicitly. This is an interim solution until FunctionComponent will accept no children by default (planned for React 18).
+
+
+
+```ts
+type Props = { foo: string };
+
+// OK now, in future, error
+const FunctionComponent: React.FunctionComponent = ({
+ foo,
+ children,
+}: Props) => {
+ return (
+
+ {foo} {children}
+
+ ); // OK
+};
+
+// Error now, in future, deprecated
+const VoidFunctionComponent: React.VoidFunctionComponent = ({
+ foo,
+ children,
+}) => {
+ return (
+
+ {foo}
+ {children}
+
+ );
+};
+```
+
+
+
- _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.
In most cases it makes very little difference which syntax is used, but you may prefer the more explicit nature of `React.FunctionComponent`.