Dans les typescript(*.tsx)
fichiers, je ne peux pas importer de fichier svg avec cette déclaration:
import logo from './logo.svg';
Transpiler dit: [ts] cannot find module './logo.svg'.
Mon fichier svg est juste <svg>...</svg>
.
Mais dans le .js
fichier, je suis capable de l'importer sans aucun problème avec exactement la même déclaration d'importation. Je suppose que cela a quelque chose à voir avec le type de fichier svg qui doit être défini d'une manière ou d'une autre pour ts transpiler.
Pourriez-vous s'il vous plaît partager comment faire fonctionner cela dans les fichiers TS?
typescript
svg
AngryBoy
la source
la source
import
déclaration. Webpack est peut-être ce qui permet cela dans votre JavaScript, mais il ne fait pas la même magie dans les fichiers TypeScript. (Je ne pense pas que TypeScript lui-même sache quoi faire ici.)const logo = require("./logo.svg");
ou simplement ignorer l'erreur. (Je pense que TS devrait toujours produire le bon code.)const logo = require("./logo.svg") as string;
Réponses:
Si vous utilisez webpack, vous pouvez le faire en créant un fichier de types personnalisés.
Créez un fichier nommé custom.d.ts avec le contenu suivant:
Ajouter le
custom.d.ts
àtsconfig.json
comme ci-dessousSource: https://webpack.js.org/guides/typescript/#importing-other-assets
la source
include
section dans tsconfig.json ."files": [ "custom.d.ts" ]
const content: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
custom.d.ts
fichier fonctionne globalement afin que le SVG puisse être dans un répertoire différent de celui ducustom.d.ts
fichier? J'obtiens une erreur "Impossible de trouver le module" sauf s'il se trouve dans le même répertoire.Merci smarx pour avoir signalé l'utilisation
require()
. Donc, dans mon cas, cela devrait être:qui fonctionne bien dans les fichiers * .tsx
la source
logo
pourrait être mieux nommélogoPath
, car c'est ce que cela devient.logo
dans la question, donc c'est une meilleure réponse à cette question spécifique telle qu'elle est.Ajoutez un
custom.d.ts
fichier (je l'ai créé sur le chemin racine de mon répertoire src) avec le type correct (grâce à RedMatt ):Installez svg-react-loader ou un autre , puis:
Ensuite, utilisez-le simplement comme une balise JSX:
la source
La solution que j'ai trouvée: dans le projet ReactJS, dans le fichier react-app-env.d.ts, vous supprimez simplement l'espace dans le commentaire tel que:
Avant
Après
J'espère t'aider
la source
J'ai eu le même problème en essayant un tutoriel dactylographié REACT +.
Ce qui a fonctionné pour moi, c'est la déclaration d'importation suivante.
Voici mes dépendances dans package.json.
J'espère que ça aide quelqu'un.
la source
Il existe une autre façon de faire cela que nous avons implémentée: créer vos composants SVG. Je l'ai fait parce que cela me dérangeait d'utiliser des
require
déclarations commonJS à côté de mesimport
s.la source
si vous utilisez le slint puglin, il se peut qu'il ait désactivé en pensant que c'était un commentaire mais pas pour lire le svg, vous avez besoin de ce type de module de script, désactivez simplement la ligne et soyez heureux
la source
Pour utiliser n actifs sur le code avec TypeScript , nous devons différer le type pour ces importations . Cela nécessite un fichier custom.d.ts qui signifie des définitions personnalisées pour TypeScript dans notre projet.
Configurons une déclaration pour les fichiers .svg:
custom.d.ts
Ici, nous déclarons un nouveau module pour les SVG en spécifiant toute importation qui se termine par .svg et en définissant le contenu du module comme any.
la source