[react] improve React.cloneElement with F-bounded polymorphism

This commit is contained in:
Vincent Siao 2016-02-26 16:33:12 -08:00
parent 60ea35043d
commit a3d2b67d36
2 changed files with 19 additions and 11 deletions

View File

@ -187,13 +187,17 @@ var domElement: React.ReactHTMLElement =
// React.cloneElement
var clonedElement: React.ReactElement<Props> =
React.cloneElement(element, props);
React.cloneElement(element, { foo: 43 });
var clonedStatelessElement: React.ReactElement<SCProps> =
React.cloneElement(statelessElement, props);
// known problem: cloning with optional props don't work properly
// workaround: cast to actual props type
React.cloneElement(statelessElement, <SCProps>{ foo: 44 });
var clonedClassicElement: React.ClassicElement<Props> =
React.cloneElement(classicElement, props);
var clonedDOMElement: React.ReactHTMLElement =
React.cloneElement(domElement);
React.cloneElement(domElement, {
className: "clonedElement"
});
// React.render
var component: React.Component<Props, any> =

20
react/react.d.ts vendored
View File

@ -92,17 +92,21 @@ declare namespace __React {
props?: P,
...children: ReactNode[]): ReactElement<P>;
function cloneElement<P>(
element: DOMElement<P>,
props?: P,
...children: ReactNode[]): DOMElement<P>;
function cloneElement<P>(
function cloneElement(
element: ReactHTMLElement,
props?: HTMLProps<HTMLElement>,
...children: ReactNode[]): ReactHTMLElement;
function cloneElement(
element: ReactSVGElement,
props?: SVGProps,
...children: ReactNode[]): ReactSVGElement;
function cloneElement<P extends Q, Q>(
element: ClassicElement<P>,
props?: P,
props?: Q,
...children: ReactNode[]): ClassicElement<P>;
function cloneElement<P>(
function cloneElement<P extends Q, Q>(
element: ReactElement<P>,
props?: P,
props?: Q,
...children: ReactNode[]): ReactElement<P>;
function isValidElement(object: {}): boolean;