Typescript: typeRoots tidak menemukan file deklarasi kustom

Dibuat pada 28 Feb 2018  ·  15Komentar  ·  Sumber: microsoft/TypeScript



TypeScript Version:
Versi 2.6.2


Istilah Pencarian:
file deklarasi untuk fungsi ekspor modul, modul eksternal, paket npm, modul pihak ketiga

Kode
src/testFile.ts :

import getFieldList = require('graphql-list-fields');

src/@types/graphql-list-fields/index.d.ts :

// Doing just this below (as suggested by the Typescript Handbook does not work 
// and results in the tsc error under **Actual behavior** below
import { GraphQLResolveInfo } from 'graphql';
declare function getFieldList(info: GraphQLResolveInfo): string[];
export = getFieldList;

// The code below is what actually works instead of the above
/*
declare module 'graphql-list-fields' {
    import { GraphQLResolveInfo } from 'graphql';
    function getFieldList(info: GraphQLResolveInfo): string[];
    export = getFieldList;
}
*/

Perilaku yang diharapkan:
Mengompilasi tanpa kesalahan.

Perilaku sebenarnya:
Kesalahan saat menjalankan tsc :

src/testFile.ts(1,31): error TS7016: Could not find a declaration file for module 'graphql-list-fields'. '/node_modules/graphql-list-fields/index.js' implicitly has an 'any' type.
Try `npm install @types/graphql-list-fields` if it exists or add a new declaration (.d.ts) file containing `declare module 'graphql-list-fields';`

graphql-list-fields adalah paket NPM yang saya coba gunakan, yang saat ini tidak memiliki deklarasi tipe yang diterbitkan.

Setelah membaca bagian Buku Pegangan Ketikan pada file deklarasi, saya menemukan bahwa saya mencoba menulis file deklarasi untuk perpustakaan modular dan harus menggunakan template file deklarasi module-function.d.ts . Ini adalah bagaimana saya mendapatkan kode di index.d.ts atas, tetapi kompilator masih mengeluh karena tidak memiliki file deklarasi untuk modul 'graphql-list-fields'. Setelah trial and error, kami menemukan bahwa menambahkan declare module 'graphql-list-fields' sekitar semuanya bekerja tanpa kesalahan compiler.

Kami mencoba menyetel "typeRoots": ["./node_modules/@types", "./src/@types"] di tsconfig.json , seperti yang disebutkan di dokumen tsconfig tetapi tetap tidak berhasil tanpa declare module 'graphql-list-fields' . Ini tampaknya menjadi masalah karena tsc tidak menemukan deklarasi type di direktori yang ditentukan di typeRoots.

Masalah Terkait:
3019 , 8335

Question

Komentar yang paling membantu

TypeRoots benar-benar dukungan yang telah kami tambahkan untuk back compat dengan pengetikan dan untuk memungkinkan migrasi, jadi kami mencoba untuk menyembunyikannya dari dokumen sebanyak mungkin untuk menghindari kebingungan.

@mhegazy Memiliki fitur yang didukung dengan sedikit atau tidak ada dokumentasi yang menyebabkan kebingungan. Harap dokumentasikan fitur-fitur seperti ini dengan benar tetapi bebas dengan bahasa peringatan Anda. Sebagai contoh:

_ Catatan: Fitur ini disediakan untuk kompatibilitas mundur dengan pengetikan untuk mendukung migrasi. Lihat catatan rilis [di sini] untuk informasi lebih lanjut._

Ini akan _vastly_ lebih disukai daripada harus memindai Masalah GitHub, StackExchange, dll. Untuk mendapatkan informasi.

Semua 15 komentar

"typeRoots" dimaksudkan untuk kode global. yaitu sesuatu yang dideklarasikan di namespace global, dan Anda ingin memasukkannya. inilah mengapa declare module 'graphql-list-fields' {.. berfungsi, karena ini hanya mendeklarasikan modul dengan nama itu di namespace global.

Untuk modul, mereka memiliki cakupannya sendiri, yang Anda butuhkan hanyalah path mappig ..

sesuatu seperti:

{
    "compilerOptions": {
        "target": "es5",
        "baseUrl": "./",
        "paths": {
            "*" : ["src/@t`ypes/*"]
        }
    }
}`

Terima kasih telah menyelesaikannya di @mhegazy. Saya pikir akan sangat membantu jika ini dijelaskan lebih lanjut di dokumen TypeScript, mungkin di bawah bagian file deklarasi .

TypeRoots benar-benar dukungan yang telah kami tambahkan untuk back compat dengan pengetikan dan untuk memungkinkan migrasi, jadi kami mencoba untuk menyembunyikannya dari dokumen sebanyak mungkin untuk menghindari kebingungan.

Tidak yakin apakah ini cocok dengan bagian file deklarasi. kami memiliki catatan tentang itu di https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping

Saya dapat menambahkan catatan di bagian file deklarasi tentang bagian resolusi modul secara keseluruhan.

Bacalah bagian tersebut dan beri tahu kami jika Anda masih menemukan kekurangan dokumen di dalamnya

Oh begitu. Ya, itu adalah halaman yang saya butuhkan untuk memulai. Saya pikir alangkah baiknya jika setidaknya disebutkan secara singkat tentang pemetaan jalur dan mungkin tautan ke dokumen itu di suatu tempat di bawah https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html.

Secara otomatis menutup masalah ini untuk keperluan rumah tangga. Label masalah menunjukkan bahwa saat ini tidak dapat ditindaklanjuti atau telah ditangani.

Saya masih berpikir akan sangat membantu jika dokumen diperbarui seperti yang dinyatakan dalam komentar saya sebelumnya @ typescript-bot

TypeRoots benar-benar dukungan yang telah kami tambahkan untuk back compat dengan pengetikan dan untuk memungkinkan migrasi, jadi kami mencoba untuk menyembunyikannya dari dokumen sebanyak mungkin untuk menghindari kebingungan.

@mhegazy Memiliki fitur yang didukung dengan sedikit atau tidak ada dokumentasi yang menyebabkan kebingungan. Harap dokumentasikan fitur-fitur seperti ini dengan benar tetapi bebas dengan bahasa peringatan Anda. Sebagai contoh:

_ Catatan: Fitur ini disediakan untuk kompatibilitas mundur dengan pengetikan untuk mendukung migrasi. Lihat catatan rilis [di sini] untuk informasi lebih lanjut._

Ini akan _vastly_ lebih disukai daripada harus memindai Masalah GitHub, StackExchange, dll. Untuk mendapatkan informasi.

Terima kasih , @types itu akhirnya adalah bagian yang hilang yang membuat penyiapan proyek non-standar saya berfungsi. Saya menghabiskan waktu berhari-hari untuk ini.

Jika Anda tidak keberatan memperlambat proses awal aplikasi Anda, Anda cukup menambahkan TS_NODE_FILES=true ke skrip awal package.json Anda dan semua file deklarasi kustom akan ditemukan.

Saya sekarang mendapatkan:

The following changes are being made to your tsconfig.json file:
  - compilerOptions.paths must not be set (aliased imports are not supported)

dan opsi ini sedang dihapus.

@KrzysztofMadejski yang dilakukan oleh CRA, bukan TS itu sendiri.

Utas ini mengatakan bahwa typeroot benar-benar untuk kompatibilitas ke belakang. Saya mencoba menggunakannya untuk tipe penulis untuk diketik secara definitif. Bagaimana lagi saya bisa menguji jenis ini dengan benar tanpa typeroot? Saya telah menghasilkan tipe menggunakan dts-gen dan menambahkan types ke root tipe saya dan masih belum berhasil :-(

@Roaders apakah Anda menemukan solusi untuk menggunakan dts-gen jenis yang dihasilkan?

Sunting: Diselesaikan dengan https://github.com/microsoft/TypeScript/issues/22217#issuecomment -369783776

Satu hal yang saya tidak mengerti di sini adalah:

tsconfig.base.json:

"typeRoots": ["node_modules/@types", "types"],

Dan struktur direktori:

/node_modules/@types/something/index.d.ts
/types/something-else/index.d.ts

Itu tidak akan diambil sama sekali di repositori nrwl / nx saya. Saya dapat mencoba satu juta hal tapi jika saya pindah bahwa something-else folder dalam node_modules/@types itu akan ajaib bekerja dan dijemput, yang menunjukkan typeRoots tidak apa-apa sebagai node_modules/@types ditangani secara ajaib.

Menandai typeRoots sebagai usang dan mengatakannya bekerja dengan cara yang aneh / unik setidaknya akan menghentikan saya mencoba menggunakannya.

Satu-satunya cara saya berhasil menambahkan tipe lokal setiap kali saya membutuhkannya, adalah dengan menghabiskan berjam-jam berkelahi dengan tsconfig.base.json saya dan menemukan komentar mhegazy di atas

Saya terus digigit oleh ini dan lupa tentang harus mengkonfigurasi opsi paths juga, jadi saya membuat repositori sederhana dengan pengaturan yang tepat. Semoga bisa membantu seseorang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat