From 29ca22c8b04385e63899d6ea00c5b1bb371ba33a Mon Sep 17 00:00:00 2001 From: York Yao Date: Mon, 25 Sep 2017 11:14:17 -0500 Subject: [PATCH] [React] change createElement declaration (#19858) * fix https://github.com/Microsoft/TypeScript/issues/15019 * change the stable v15 declaration too * catch-all case also take string * add string for test --- types/react/index.d.ts | 2 +- types/react/test/index.ts | 6 ++++++ types/react/v15/index.d.ts | 2 +- types/react/v15/test/index.ts | 6 ++++++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/types/react/index.d.ts b/types/react/index.d.ts index 5588e85197..26c2dd022e 100644 --- a/types/react/index.d.ts +++ b/types/react/index.d.ts @@ -216,7 +216,7 @@ declare namespace React { props?: ClassAttributes & P, ...children: ReactNode[]): CElement; function createElement

( - type: ComponentClass

, + type: SFC

| ComponentClass

| string, props?: Attributes & P, ...children: ReactNode[]): ReactElement

; diff --git a/types/react/test/index.ts b/types/react/test/index.ts index 79eab5e88d..f2ce7db821 100644 --- a/types/react/test/index.ts +++ b/types/react/test/index.ts @@ -193,6 +193,12 @@ const customProps: React.HTMLProps = props; const customDomElement = "my-element"; const nonLiteralElement = React.createElement(customDomElement, customProps); +// https://github.com/Microsoft/TypeScript/issues/15019 + +function foo3(child: React.ComponentClass<{ name: string }> | React.StatelessComponent<{ name: string }> | string) { + React.createElement(child, { name: "bar" }); +} + // React.cloneElement const clonedElement: React.CElement = React.cloneElement(element, { foo: 43 }); diff --git a/types/react/v15/index.d.ts b/types/react/v15/index.d.ts index c28876dd12..80f5418488 100644 --- a/types/react/v15/index.d.ts +++ b/types/react/v15/index.d.ts @@ -223,7 +223,7 @@ declare namespace React { props?: ClassAttributes & P, ...children: ReactNode[]): CElement; function createElement

( - type: ComponentClass

, + type: SFC

| ComponentClass

| string, props?: Attributes & P, ...children: ReactNode[]): ReactElement

; diff --git a/types/react/v15/test/index.ts b/types/react/v15/test/index.ts index 7c22f8dfff..b76e541849 100644 --- a/types/react/v15/test/index.ts +++ b/types/react/v15/test/index.ts @@ -193,6 +193,12 @@ const customProps: React.HTMLProps = props; const customDomElement = "my-element"; const nonLiteralElement = React.createElement(customDomElement, customProps); +// https://github.com/Microsoft/TypeScript/issues/15019 + +function foo3(child: React.ComponentClass<{ name: string }> | React.StatelessComponent<{ name: string }> | string) { + React.createElement(child, { name: "bar" }); +} + // React.cloneElement const clonedElement: React.CElement = React.cloneElement(element, { foo: 43 });