Di sini kita belajar cara menulis fail pengisytiharan Typescript berkualiti tinggi. Jadi anda mengekod dalam ReactJS dan ingin mengimport fail SVG tetapi IDE/tsc anda mengeluh.
[ts] cannot find module './logo.svg'
Inilah masanya untuk beralih kepada Stackoverflow untuk penyelesaian copypaste pantas.
Tetapi mari kita berpegang teguh dan cuba memahami fail ini dan apa yang mereka lakukan untuk kita seketika.
Dalam TS/JS kami mempunyai banyak pendekatan untuk memodulasi apl kami yang ditulis dalam TS/JS. Pada masa ini yang paling berkuasa ialah ESM (modul AKA ES, modul ES6). Kami biasanya mengenali mereka dengan sintaks mereka:
Jadi untuk menjawab soalan asal, dalam TS/JS selaras dengan ECMAScript 2015, sebarang fail yang mengandungi peringkat atas import atau eksport dianggap sebagai modul.
Dan jika seseorang tidak mempunyai sebarang import atau eksport peringkat tertinggi:
Tiada pencemaran ruang nama global lagi. Ini menunjukkan bahawa:
Dalam resolusi modul TS ialah proses mengambil rentetan daripada pernyataan import atau memerlukan dan menentukan fail yang dirujuk oleh rentetan itu.
Dalam TS kita ada dua strategi:
BTW kami mempunyai banyak tempat yang kami mungkin sengaja atau tidak sengaja mengubahnya (moduleResolution, baseUrl, laluan, rootDir).
Contohnya jika anda sedang membina apl anda untuk menggunakan ESM (versi yang disusun menggunakan ESM) maka anda perlu memilih "NodeNext" dalam compilerOptions.module anda.
Nota: jika di dalam dir itu anda mempunyai package.json. Kemudian TS menggunakan utama dan jenisnya untuk mengambil jenisnya.
Ketahui lebih lanjut di sini.
Jadi pada asasnya ia memetakan semula import untuk mencari lokasi*s* berbanding dengan baseUrl jika ditetapkan, sebaliknya kepada fail tsconfig. Kes penggunaan yang paling biasa untuk ini ialah alias laluan:
[ts] cannot find module './logo.svg'
Awas
Ini tidak bermakna apa-apa untuk masa jalan. Bermakna pengikat atau pengkompil kesayangan anda perlu menjaga penggabungan mereka dengan betul. Dan jika laluan anda menghala ke tempat yang tidak wujud maka apl anda akan ranap apabila ia dilaksanakan oleh NodeJS.
Petua
Sebaliknya, anda boleh menggunakan import package.json (AKA Subpath import).
Untuk menjejaskan output JS yang dipancarkan, kami boleh mengubah suai:
Jadi, kami ingin mengimport fail .graphql atau sambungan lain yang TS tidak mempunyai idea tentang rupa mereka (ia tidak dapat menyelesaikan jenisnya). Jadi sekarang TS tahu rupa svg, graphql atau fail lain yang diimport.
rujuk.
Penentukan kosong: nama modul dalam pernyataan import yang BUKAN laluan relatif atau mutlak. Ini biasanya nama pakej dalam node_modules projek anda atau lokasi lain yang dikonfigurasikan. ↩
Atas ialah kandungan terperinci Pengisytiharan modul dalam TS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!