Ich arbeite mit einem JavaScript-Legacy-Projekt, das das React-Framework verwendet. Wir haben dort eine React-Komponente definiert, die ich in einem völlig anderen TypeScript React-Projekt wiederverwenden möchte.
Die JS React-Komponente ist in der Datei controls.jsx definiert und sieht folgendermaßen aus:
export class MyComponent extends React.Component {
render() {
return <h1>Hi from MyComponent! Message provided: {this.props.message}</h1>;
}
}
In meinem TypeScript React-Projekt versuche ich es so zu verwenden:
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")
);
aber ich bekomme folgenden Fehler:
Fehlermeldungen sagen:
Der JSX-Elementtyp 'MyComponent' ist keine Konstruktorfunktion für JSX-Elemente. Beim Typ 'MyComponent' fehlen die folgenden Eigenschaften vom Typ 'ElementClass': context, setState, forceUpdate, props und 2 more.ts (2605) Die JSX-Elementklasse unterstützt keine Attribute, da sie keine 'props'-Eigenschaft.ts enthält (2607)
Ich habe die Lösung bereits mit einer in dieser Frage beschriebenen benutzerdefinierten Typisierungsdatei ausprobiert , aber sie ändert nichts.
Ich verstehe, dass die JS-Komponente einige stark typisierte Eigenschaften hat, die von TypeScript benötigt werden, aber in meiner tsconfig.json habe ich die allowJs auf true gesetzt :
{
"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"
]
}
also hoffte ich, dass es funktionieren sollte ...
Danke für Ihre Hilfe