En typescript(*.tsx)
archivos no puedo importar archivos svg con esta declaración:
import logo from './logo.svg';
Transpiler dice: [ts] cannot find module './logo.svg'.
Mi archivo svg es solo <svg>...</svg>
.
Pero en el .js
archivo puedo importarlo sin problemas con exactamente la misma declaración de importación. Supongo que tiene algo que ver con el tipo de archivo svg que debe configurarse de alguna manera para ts transpiler.
¿Podría compartir cómo hacer que esto funcione en archivos ts?
typescript
svg
Muchacho enojado
fuente
fuente
import
afirmación. Quizás Webpack es lo que permite esto en su JavaScript, pero no está haciendo la misma magia en los archivos TypeScript. (No creo que TypeScript sepa qué hacer aquí.)const logo = require("./logo.svg");
o simplemente ignorar el error. (Creo que TS aún debería generar el código correcto).const logo = require("./logo.svg") as string;
Respuestas:
Si usa webpack, puede hacer esto creando un archivo de tipos personalizados.
Cree un archivo llamado custom.d.ts con el siguiente contenido:
Agregue el
custom.d.ts
atsconfig.json
como se muestra a continuaciónFuente: https://webpack.js.org/guides/typescript/#importing-other-assets
fuente
include
sección en tsconfig.json ."files": [ "custom.d.ts" ]
const content: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
custom.d.ts
archivo funcione globalmente para que el SVG pueda estar en un directorio diferente al delcustom.d.ts
archivo? Recibo un error "no se puede encontrar el módulo" a menos que esté en el mismo directorio.Gracias smarx por señalar el uso
require()
. Entonces en mi caso debería ser:que funciona bien en archivos * .tsx
fuente
logo
podría ser mejor nombradologoPath
, porque en eso se convierte.logo
en la pregunta, por lo que es una mejor respuesta a esta pregunta específica tal como está.Agregue un
custom.d.ts
archivo (lo creé en la ruta raíz de mi directorio src) con el tipo correcto (gracias a RedMatt ):Instale svg-react-loader o algún otro , luego:
Luego utilícelo como una etiqueta JSX:
fuente
La solución que encontré: en el proyecto ReactJS, en el archivo react-app-env.d.ts simplemente elimina el espacio en el comentario, como por ejemplo:
antes de
Después
Espero poder ayudarte
fuente
Tuve el mismo problema al probar un tutorial de REACT + mecanografiado.
Lo que funcionó para mí fue la siguiente declaración de importación.
Aquí están mis dependencias en package.json.
Espero que ayude a alguien.
fuente
Para usar n activos en código con TypeScript , debemos diferir el tipo para estas importaciones . Esto requiere un archivo custom.d.ts que significa definiciones personalizadas para TypeScript en nuestro proyecto.
Configuremos una declaración para archivos .svg:
custom.d.ts
Aquí declaramos un nuevo módulo para SVG especificando cualquier importación que termine en .svg y definiendo el contenido del módulo como cualquiera.
fuente
Hay una forma alternativa de hacer esto que hemos implementado: haga sus componentes SVG. Hice esto porque me molestaba que estuviera usando
require
declaraciones commonJS junto con miimport
s.fuente
si está utilizando el puglin slint, puede ser que haya deshabilitado pensando que era un comentario, pero no para leer el svg, necesita este módulo de script de tipo, simplemente deshabilite la línea y sea feliz
fuente