Dalam typescript(*.tsx)
file saya tidak dapat mengimpor file svg dengan pernyataan ini:
import logo from './logo.svg';
Transpiler mengatakan: [ts] cannot find module './logo.svg'.
File svg saya hanya <svg>...</svg>
.
Tetapi dalam .js
file saya dapat mengimpornya tanpa masalah dengan pernyataan impor yang persis sama. Saya kira ini ada hubungannya dengan jenis file svg yang harus diatur entah bagaimana untuk transpiler ts.
Bisakah Anda berbagi cara membuat ini berfungsi di file ts?
typescript
svg
AngryBoy
sumber
sumber
import
pernyataan seperti itu . Mungkin Webpack adalah yang mengizinkan ini di JavaScript Anda, tetapi itu tidak melakukan keajaiban yang sama dalam file TypeScript. (Saya tidak berpikir bahwa TypeScript sendiri tahu apa yang harus dilakukan di sini.)const logo = require("./logo.svg");
atau mengabaikan kesalahan tersebut. (Saya yakin TS masih harus mengeluarkan kode yang benar.)const logo = require("./logo.svg") as string;
Jawaban:
Jika Anda menggunakan webpack, Anda dapat melakukannya dengan membuat file tipe kustom.
Buat file bernama custom.d.ts dengan konten berikut:
Tambahkan
custom.d.ts
ketsconfig.json
seperti di bawah iniSumber: https://webpack.js.org/guides/typescript/#importing-other-assets
sumber
include
bagian di tsconfig.json ."files": [ "custom.d.ts" ]
const content: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
custom.d.ts
file berfungsi secara global sehingga SVG dapat berada di direktori yang berbeda daricustom.d.ts
file? Saya mendapatkan pesan kesalahan "tidak dapat menemukan modul" kecuali itu dalam direktori yang sama.Terima kasih smarx untuk menunjukkan penggunaan
require()
. Jadi dalam kasus saya seharusnya:yang berfungsi dengan baik di file * .tsx
sumber
logo
mungkin lebih baik dinamailogoPath
, karena memang seperti itu.logo
dalam pertanyaan, jadi ini adalah jawaban yang lebih baik untuk pertanyaan spesifik ini sebagaimana adanya.Tambahkan
custom.d.ts
file (saya membuatnya di jalur root dir src saya) dengan jenis yang benar (terima kasih kepada RedMatt ):Instal svg-react-loader atau lainnya , lalu:
Kemudian gunakan saja sebagai tag JSX:
sumber
Solusi yang saya temukan: Dalam proyek ReactJS, di file react-app-env.d.ts Anda cukup menghapus spasi di komentar seperti:
Sebelum
Setelah
Saya berharap dapat membantu Anda
sumber
Saya mengalami masalah yang sama saat mencoba tutorial ketikan REACT +.
Yang berhasil bagi saya adalah pernyataan impor berikut.
Berikut adalah dependensi saya di package.json.
Semoga bisa membantu seseorang.
sumber
Ada cara alternatif untuk melakukan ini yang telah kami terapkan: buat komponen SVG Anda. Saya melakukan ini karena mengganggu saya bahwa saya menggunakan
require
pernyataan commonJS di samping pernyataan sayaimport
.sumber
jika Anda menggunakan puglin slint, mungkin dia telah menonaktifkan berpikir itu adalah komentar tetapi tidak untuk membaca svg Anda memerlukan modul skrip tipe ini cukup nonaktifkan baris dan berbahagialah
sumber
Untuk menggunakan n aset dalam kode dengan TypeScript , kita perlu menunda jenis untuk impor ini . Ini membutuhkan file custom.d.ts yang menandakan definisi kustom untuk TypeScript dalam proyek kami.
Mari kita siapkan deklarasi untuk file .svg:
custom.d.ts
Di sini kami mendeklarasikan modul baru untuk SVG dengan menentukan impor apa pun yang diakhiri dengan .svg dan mendefinisikan konten modul sebagai apa saja.
sumber