reactjs - Typ 'FunctionComponent>' ist nicht dem Typ 'string' zuweisbar. ts
Ich erhalte den folgenden Fehler, wenn ich meine auf JS basierende React-App in TypeScript konvertiere.
Type 'FunctionComponent<SVGAttributes<SVGElement>>' is not assignable to type 'string'.ts(2322)
index.d.ts(2188, 9): The expected type comes from property 'src' which is declared here on type 'DetailedHTMLProps<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>'
Unten ist meine App.tsx-Datei
import React from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
Hier zeigt das src-Attribut des Bild-Tags diesen Kompilierungsfehler
Keine Ahnung, wie man das löst
Meine React-Version ist 9.1.2
Ich habe versucht, eine React-App mit als TypeScript angegebenem Template zu erstellen, derselbe Code funktioniert einwandfrei, und ich habe den Inhalt dieser TSX-Datei in meine React-App kopiert, es wird derselbe Fehler angezeigt.
npx create-react-app myapp --template typescript
Der gleiche Inhalt in dieser App funktioniert ohne Probleme. Ich habe auch die tsconfig.json in mein Hauptprojekt kopiert. Das hat in keiner Weise geholfen.
Antwort #1
Ändern Sie Ihren Inhalt von
declare module "*.svg" {
const content: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
export default content;
}
zu
declare module "*.svg" {
const content: any;
export default content;
}
Antwort #2
Hier sind einige Möglichkeiten, wie Sie das erreichen können: https://blog.logrocket.com/how-to-use-svgs-in-react/
Ich empfehle diese Option, da sie einfach zu schreiben ist und es Ihnen ermöglicht, später die Kontur und Füllung der SVG zu ändern.
import { ReactComponent as ReactLogo } from './logo.svg';
const App = () => {
return (
<div className="App">
<ReactLogo />
</div>
);
};
