declare namespace JSX JSX {
interface ElementClass {
render: any;
}
}
class MyComponent {
render() {}
}
function MyFactoryFunction() {
return {
render: () => {}
};
}
; // ok
; // ok
class NotAValidComponent {}
function NotAValidFactoryFunction() {
return {};
}
; // error
; // error
class MyComponent {
render() {}
}
// use a construct signature
var myComponent = new MyComponent();
function MyFactoryFunction() {
return {
render: () => {}
};
}
// use a call signature
var myComponent = MyFactoryFunction();
declare namespace JSX {
interface ElementAttributesProperty {
props; // specify the property name to use
}
}
class MyComponent {
// specify the property on the element instance type
props: {
foo?: string;
};
}
// element attributes type for 'MyComponent' is '{foo?: string}'
;
declare namespace JSX {
interface IntrinsicElements {
foo: {
requiredProp : string;
optionalProp?: number
};
}
}
; // ok
; // ok
; // error, requiredProp is missing
; // error, requiredProp should be a string
; // error, unknownProp does not exist
; // ok, because 'some-unknown-prop' is not a valid identifier
var a =
{
["foo", "bar"].map(function (i) {
return {i / 2};
});
}