diff --git a/types/react/index.d.ts b/types/react/index.d.ts index 2112f615b0..7bbee68c1d 100644 --- a/types/react/index.d.ts +++ b/types/react/index.d.ts @@ -2788,9 +2788,8 @@ declare namespace React { // ---------------------------------------------------------------------- interface ReactChildren { - map(children: null, fn: (child: never, index: number) => never): null; - map(children: undefined, fn: (child: never, index: number) => never): undefined; - map(children: C | C[], fn: (child: C, index: number) => T): Array>; + map(children: C | C[], fn: (child: C, index: number) => T): + C extends null | undefined ? C : Array>; forEach(children: C | C[], fn: (child: C, index: number) => void): void; count(children: any): number; only(children: C): C extends any[] ? never : C; diff --git a/types/react/test/index.ts b/types/react/test/index.ts index 4ee1c6caa2..28806f48a2 100644 --- a/types/react/test/index.ts +++ b/types/react/test/index.ts @@ -514,6 +514,7 @@ onlyChild = React.Children.only([null, [[["Hallo"], true]], false]); // error const childrenToArray: Array> = React.Children.toArray(children); declare const numberChildren: number[]; +declare const nodeChildren: React.ReactNode; declare const elementChildren: JSX.Element[]; declare const mixedChildren: Array; declare const singlePluralChildren: JSX.Element | JSX.Element[]; @@ -533,6 +534,9 @@ const mappedChildrenArray4 = React.Children.map(mixedChildren, elementOrString = const mappedChildrenArray5 = React.Children.map(singlePluralChildren, element => element.key); // $ExpectType string[] const mappedChildrenArray6 = React.Children.map(renderPropsChildren, element => element.name); +// The return type may not be an array +// $ExpectError +const mappedChildrenArray7 = React.Children.map(nodeChildren, node => node).map; // // Example from http://facebook.github.io/react/