From d76bfa33948303098043b755be388a880bdef6b0 Mon Sep 17 00:00:00 2001 From: Vincent Siao Date: Wed, 9 Dec 2015 11:54:15 -0800 Subject: [PATCH] [React] Add SFC displayName and fix onlyChild type - `StatelessComponent` is missing an optional `displayName` property - `ReactChildren.only` always returns a `ReactElement` - add tests for the above and `ReactTestUtils.renderIntoDocument` --- react/react-tests.ts | 11 ++++++++--- react/react.d.ts | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/react/react-tests.ts b/react/react-tests.ts index 53861d35c..13e2ab12f 100644 --- a/react/react-tests.ts +++ b/react/react-tests.ts @@ -146,9 +146,10 @@ var StatelessComponent = (props: SCProps) => { return React.DOM.div(null, props.foo); }; -// Must explicitly type-annotate to add defaultProps/contextTypes +// Must explicitly type-annotate to add displayName/defaultProps/contextTypes var StatelessComponent2: React.StatelessComponent = (props: SCProps) => React.DOM.div(null, props.foo); +StatelessComponent2.displayName = "StatelessComponent2"; StatelessComponent2.defaultProps = { foo: 42 }; @@ -405,7 +406,8 @@ var mappedChildrenArray: number[] = React.Children.map(children, (child) => { return 42; }); React.Children.forEach(children, (child) => {}); var nChildren: number = React.Children.count(children); -var onlyChild = React.Children.only([null, [[["Hallo"], true]], false]); +var onlyChild: React.ReactElement = React.Children.only(React.DOM.div()); // ok +onlyChild = React.Children.only([null, [[["Hallo"], true]], false]); // error var childrenToArray: React.ReactChild[] = React.Children.toArray(children); // @@ -521,7 +523,10 @@ React.createClass({ // // TestUtils addon // -------------------------------------------------------------------------- -var node: Element; + +var inst: ModernComponent = TestUtils.renderIntoDocument(element); +var node: Element = TestUtils.renderIntoDocument(React.DOM.div()); + TestUtils.Simulate.click(node); TestUtils.Simulate.change(node); TestUtils.Simulate.keyDown(node, { key: "Enter" }); diff --git a/react/react.d.ts b/react/react.d.ts index fb04cf0f5..c322d9a54 100644 --- a/react/react.d.ts +++ b/react/react.d.ts @@ -148,6 +148,7 @@ declare namespace __React { propTypes?: ValidationMap

; contextTypes?: ValidationMap; defaultProps?: P; + displayName?: string; } interface ComponentClass

{ @@ -2070,7 +2071,7 @@ declare namespace __React { map(children: ReactNode, fn: (child: ReactChild, index: number) => T): T[]; forEach(children: ReactNode, fn: (child: ReactChild, index: number) => any): void; count(children: ReactNode): number; - only(children: ReactNode): ReactChild; + only(children: ReactNode): ReactElement; toArray(children: ReactNode): ReactChild[]; }