Estoy trabajando con un proyecto heredado de JavaScript que usa el marco React. Tenemos definido algún componente React que me gustaría reutilizar en un proyecto TypeScript React totalmente diferente.
El componente JS React se define en el archivo controls.jsx y tiene el siguiente aspecto:
export class MyComponent extends React.Component {
render() {
return <h1>Hi from MyComponent! Message provided: {this.props.message}</h1>;
}
}
En mi proyecto TypeScript React estoy tratando de usarlo así:
import * as React from "react";
import * as ReactDOM from "react-dom";
import { MyComponent } from "../JavaScriptProject/controls";
ReactDOM.render(
<MyComponent message="some nice message"/>,
document.getElementById("documents-tree")
);
pero recibo el siguiente error:
Los mensajes de error dicen:
El tipo de elemento JSX 'MyComponent' no es una función constructora para elementos JSX. Al tipo 'MyComponent' le faltan las siguientes propiedades del tipo 'ElementClass': context, setState, forceUpdate, props y 2 more.ts (2605) La clase de elemento JSX no admite atributos porque no tiene una propiedad 'props'. (2607)
Ya probé la solución con el archivo de tipificación personalizado descrito en esta pregunta, pero no cambia nada.
Entiendo que el componente JS tiene algunas propiedades fuertemente tipadas requeridas por falta de TypeScript, pero en mi tsconfig.json tengo los allowJs establecidos en verdadero :
{
"compilerOptions": {
"allowJs": true,
"baseUrl": ".",
"experimentalDecorators": true,
"jsx": "react",
"noEmitOnError": true,
"outDir": "lib",
"sourceMap": true,
"target": "es5",
"lib": [
"es2015",
"dom"
]
},
"exclude": [
"node_modules",
"dist",
"lib",
"lib-amd"
]
}
así que esperaba que funcionara ...
Gracias por tu ayuda