diff --git a/react/react-dom.d.ts b/react/react-dom.d.ts index c95f64518b..1f6ca6efd4 100644 --- a/react/react-dom.d.ts +++ b/react/react-dom.d.ts @@ -18,14 +18,14 @@ declare namespace __React { element: SFCElement

, container: Element, callback?: () => any): void; - function render>( + function render>( element: CElement, container: Element, callback?: (component: T) => any): T; function render

( element: ReactElement

, container: Element, - callback?: (component?: Component | Element) => any): Component | Element | void; + callback?: (component?: Component | Element) => any): Component | Element | void; function unmountComponentAtNode(container: Element): boolean; @@ -40,7 +40,7 @@ declare namespace __React { element: DOMElement, container: Element, callback?: (element: T) => any): T; - function unstable_renderSubtreeIntoContainer>( + function unstable_renderSubtreeIntoContainer>( parentComponent: Component, element: CElement, container: Element, @@ -54,7 +54,7 @@ declare namespace __React { parentComponent: Component, element: ReactElement

, container: Element, - callback?: (component?: Component | Element) => any): Component | Element | void; + callback?: (component?: Component | Element) => any): Component | Element | void; } namespace __DOMServer { diff --git a/react/react-tests.ts b/react/react-tests.ts index e0d9bb7be7..dc0a409dcf 100644 --- a/react/react-tests.ts +++ b/react/react-tests.ts @@ -138,6 +138,8 @@ class ModernComponent extends React.Component } } +class ModernComponentNoState extends React.Component {} + interface SCProps { foo?: number; } @@ -182,6 +184,8 @@ var domFactoryElement: React.DOMElement = // React.createElement var element: React.CElement = React.createElement(ModernComponent, props); +var elementNoState: React.CElement = + React.createElement(ModernComponentNoState, props); var statelessElement: React.SFCElement = React.createElement(StatelessComponent, props); var classicElement: React.ClassicElement = @@ -216,6 +220,8 @@ var clonedDOMElement: React.ReactHTMLElement = // React.render var component: ModernComponent = ReactDOM.render(element, container); +var componentNoState: ModernComponentNoState = + ReactDOM.render(elementNoState, container); var classicComponent: React.ClassicComponent = ReactDOM.render(classicElement, container); var domComponent: Element = diff --git a/react/react.d.ts b/react/react.d.ts index 04939558b5..bfc465c86f 100644 --- a/react/react.d.ts +++ b/react/react.d.ts @@ -13,6 +13,7 @@ declare namespace __React { type Key = string | number; type Ref = string | ((instance: T) => any); + type ComponentState = {} | void; interface Attributes { key?: Key; @@ -31,13 +32,13 @@ declare namespace __React { type: SFC

; } - type CElement> = ComponentElement; - interface ComponentElement> extends ReactElement

{ + type CElement> = ComponentElement; + interface ComponentElement> extends ReactElement

{ type: ComponentClass

; ref?: Ref; } - type ClassicElement

= CElement>; + type ClassicElement

= CElement>; interface DOMElement

extends ReactElement

{ type: string; @@ -62,12 +63,12 @@ declare namespace __React { (props?: P & Attributes, ...children: ReactNode[]): SFCElement

; } - interface ComponentFactory> { + interface ComponentFactory> { (props?: P & ClassAttributes, ...children: ReactNode[]): CElement; } - type CFactory> = ComponentFactory; - type ClassicFactory

= CFactory>; + type CFactory> = ComponentFactory; + type ClassicFactory

= CFactory>; interface DOMFactory

{ (props?: P & ClassAttributes, ...children: ReactNode[]): DOMElement; @@ -101,8 +102,8 @@ declare namespace __React { type: string): DOMFactory; function createFactory

(type: SFC

): SFCFactory

; function createFactory

( - type: ClassType, ClassicComponentClass

>): CFactory>; - function createFactory, C extends ComponentClass

>( + type: ClassType, ClassicComponentClass

>): CFactory>; + function createFactory, C extends ComponentClass

>( type: ClassType): CFactory; function createFactory

(type: ComponentClass

| SFC

): Factory

; @@ -115,10 +116,10 @@ declare namespace __React { props?: P & Attributes, ...children: ReactNode[]): SFCElement

; function createElement

( - type: ClassType, ClassicComponentClass

>, - props?: P & ClassAttributes>, - ...children: ReactNode[]): CElement>; - function createElement, C extends ComponentClass

>( + type: ClassType, ClassicComponentClass

>, + props?: P & ClassAttributes>, + ...children: ReactNode[]): CElement>; + function createElement, C extends ComponentClass

>( type: ClassType, props?: P & ClassAttributes, ...children: ReactNode[]): CElement; @@ -135,7 +136,7 @@ declare namespace __React { element: SFCElement

, props?: Q, // should be Q & Attributes, but then Q is inferred as {} ...children: ReactNode[]): SFCElement

; - function cloneElement

>( + function cloneElement

>( element: CElement, props?: Q, // should be Q & ClassAttributes ...children: ReactNode[]): CElement; @@ -201,7 +202,7 @@ declare namespace __React { } interface ComponentClass

{ - new(props?: P, context?: any): Component; + new(props?: P, context?: any): Component; propTypes?: ValidationMap

; contextTypes?: ValidationMap; childContextTypes?: ValidationMap; @@ -210,7 +211,7 @@ declare namespace __React { } interface ClassicComponentClass

extends ComponentClass

{ - new(props?: P, context?: any): ClassicComponent; + new(props?: P, context?: any): ClassicComponent; getDefaultProps?(): P; } @@ -219,7 +220,7 @@ declare namespace __React { * a single argument, which is useful for many top-level API defs. * See https://github.com/Microsoft/TypeScript/issues/7234 for more info. */ - type ClassType, C extends ComponentClass

> = + type ClassType, C extends ComponentClass

> = C & (new() => T) & (new() => { props: P }); @@ -1180,7 +1181,7 @@ declare namespace __React { lineClamp?: number; /** - * Specifies the height of an inline block level element. + * Specifies the height of an inline block level element. */ lineHeight?: number | string; @@ -2033,7 +2034,7 @@ declare namespace __React { results?: number; security?: string; unselectable?: boolean; - + // Allows aria- and data- Attributes [key: string]: any; }