impor vscode konsol impor = memerlukan ("konsol"); secara otomatis

145
import console = require("console");

console.<< Aku mengetik. dan di atas akan diimpor secara otomatis dalam VScode. Adakah yang tahu cara menonaktifkannya?

(Saya menganggap itu adalah salah satu ekstensi saya. Mungkin lebih cantik.)

sunting: ini hanya terjadi di lingkungan Bereaksi Typcript. tidak dalam naskah tanpa bereaksi.

jiwa naga
sumber
beruntung dengan ini? Saya mengalami masalah yang sama
user2517182
Selain solusi dalam jawaban, tampaknya ini adalah bug dalam VSCode yang diperkenalkan dengan pembaruan terakhir. Laporan bug yang sesuai diisi di sini: github.com/Microsoft/vscode/issues/70157
ofhouse
1
The TS / JS Nightly Plugin perbaikan ini untuk VSCode 1.36+
Andrew Li

Jawaban:

126

Penafian: ini seharusnya tidak dianggap sebagai "solusi" tapi itu yang paling sederhana / tercepat.

Jawaban ini dengan asumsi Anda menggunakan VSCode. IDE lain harus serupa.

  1. Mulai mengetik console
  2. Klik enter atau ketik ., yang memungkinkan IntelliSense untuk menambahkanimport console = require("console");
  3. Ctrl + klik (atau F12, atau Cmd + klik pada macOS) di require("console")
  4. Komentari kode ini:
declare module "console" {
    export = console;
}
ZenVentzi
sumber
9
Jika ini Reddit, aku akan memberimu emas untuk yang ini. Terima kasih :)
FearMediocrity
5
Bekerja dengan baik. Seharusnya Cmd + klik "console", tapi itu detail. Terima kasih!
Loolooii
Jika mengalami masalah dengan F12 atau Cmd + klik, klik kanan pada "konsol" dan kemudian "pergi ke definisi" juga berfungsi (setidaknya pada osx)
imekinox
2
Ini sedang mengedit file di dalam dir node_modules yang berarti 'perbaikan' akan diatur ulang setelah Anda melakukan instalasi npm lagi. Saya mendapatkan itu adalah perbaikan cepat tetapi tidak ada di mana dekat dapat diterima
Railto
Untuk semua orang yang tidak ingin memodifikasi file pernyataan, Plugin Nightly TS / JS memperbaikinya untuk VSCode 1.36+
Andrew Li
31

Saya juga mengalami hal ini dan sepertinya ada masalah dengan fitur Impor Otomatis di VSCode. Menonaktifkan semua ekstensi juga tidak membuatnya hilang.

Sebagai solusinya, Anda dapat menonaktifkan impor otomatis di pengaturan.

Jika Anda menggunakan Javascript

"javascript.suggest.autoImports": false

Jika Anda menggunakan naskah

"typescript.suggest.autoImports": false

masukkan deskripsi gambar di sini

EDIT: Autoimport yang rusak terjadi karena kode ini dalam paket turun pohon dependensi

declare module "console" {
    export = console;
}

Paket ini dapat ditemukan di direktori node_modules lokal Anda atau dalam paket referensi yang diinstal secara global.

  1. Cari node_modules lokal Anda untuk declare module "console"
  2. Jika Anda menemukannya di paket lokal, jalankan npm list [packageName]untuk menentukan paket mana di package.json tergantung pada paket dengan kode konsol di dalamnya.

Jika Anda tidak menemukan kode di node_modules lokal Anda, Anda juga bisa

  1. Hilangkan paket satu per satu di package.json

  2. Cari kode konsol dalam modul yang diinstal secara global yang dapat dirujuk oleh paket di proyek Anda

% USERPROFILE% \ AppData \ Roaming \ npm \ node_modules% USERPROFILE% \ AppData \ Local \ Microsoft \ TypeScript

Saya tahu ini bukan solusi langsung tetapi saya harap ini membantu, dalam kasus saya, saya memiliki referensi dari react-native-copilot -> rimraf -> node yang memiliki kode konsol di dalamnya. Menghapus reaksi-asli-copilot memecahkan masalah.

KvD
sumber
8
ya itu juga tidak menyebabkan pekerjaan impor otomatis lainnya. Saya suka fitur ini dan tidak menerima ini sebagai jawaban ...: - D (terima kasih!) Pasti ada solusi lain. Saya masih mencari juga.
dragonsoul
Saya menemukan bahwa itu tidak terjadi ketika Anda membuat proyek baru dengan create-react-app my-app --scripts-version = react-scripts-ts sehingga harus terhubung ke pengaturan ruang kerja entah bagaimana.
dragonsoul
Saya melakukan riset lebih lanjut, lihat jawaban yang diedit, harap Anda menemukannya di proyek Anda!
KvD
1
Ya Itu memang berhasil. Saya berpikir, apakah ini bug VSCode atau dari pembuat paket-paket ini? Bagi saya itu di @ types / node dan @ types / react-dom. Terima kasih :-)
dragonsoul
4
menemukan kode yang salah di dalam "typescript/3.2/node_modules/@types/node/index.d.ts" yang ada di dalam ~/Library/Caches/folder. Saya menggunakan mac. Karena ini ada di ruang kerja caching saya, saya baru saja menghapus kode aktual: `` `lang-js menyatakan modul" console "{export = console; } `` `Dan itu berhasil!
jcperez-ch
17

Solusi paling elegan yang saya temukan adalah membuat console.d.tsfile dummy di suatu tempat di proyek Anda:

declare module 'console' {
    export = typeof import("console");
}

Ini akan mencegah impor otomatis.

Kredit: https://github.com/Microsoft/TypeScript/issues/30471#issuecomment-474963436

Krzysztof Kaczor
sumber
Ini adalah solusi elegan yang dapat diperiksa dan akan bekerja di beberapa ruang kerja dan perangkat. Terima kasih!
phsource
4
Mengapa saya mendapatkan "Ekspresi penugasan ekspor harus berupa pengidentifikasi atau nama yang memenuhi syarat dalam konteks ambient.ts (2714)"? Mungkin terkait dengan beberapa pengaturan di tsconfig.json saya?
Mehmet N. Yarar
Ya itu bisa ... Anda dapat memeriksa pengaturan saya di sini: github.com/codechecks/monorepo/blob/master/tsconfig.json Ini berfungsi dengan file console.d.ts
Krzysztof Kaczor
17

Jika Anda menambahkan cuplikan untuk memasukkan console.logdan menggunakannya, tidak akan ada impor otomatis "konsol"

https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets Anda

ini cuplikan saya:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}
Giorgio
sumber
5
Meskipun bukan solusi, itu cerdas dan berfungsi ketika Anda tidak dapat menghapus paket yang menyebabkan masalah, seperti yang dinyatakan dalam sebagian besar jawaban yang dipilih.
tibuurcio
Saya setuju dengan @tibuurcio. Solusi cerdas, tapi saya tidak bisa menerima ini sebagai solusi ...
dragonsoul
tidak bekerja itu masih otomatis diimpor setelah saya menulis konsol kemudian saya tekan "." itu impor otomatis
Mr.Ghamkhar
1
@ mr-ghamkhar jika Anda ingin menggunakan cuplikan di atas, Anda hanya perlu menulis "cl" atau apa pun yang Anda masukkan ke dalam "awalan". Perlu sesuatu yang lain dari "konsol" untuk dapat menghindari perilaku autoimport.
Giorgio
9

Jika Anda suka saya lupa "cl", Anda dapat menggunakan beberapa awalan dalam cuplikan :)

{
    "Print to console": {
        "prefix": ["cl","co","con","cons","conso","consol","console", "console.l","console.lo","console.log"],
        "body": [
            "console.log($1);",
        ],
        "description": "Log output to console"
    }   
}
FOLOF
sumber
1
Jawaban yang benar adalah malas :)
FOLOF
Ini adalah solusi terbaik bagi saya, karena Anda tidak perlu mengedit paket internal
Harrison
5

Salah satu cara untuk mencegah hal ini terjadi adalah dengan memodifikasi file tsconfig.json Anda untuk membatasi serangkaian jenis yang secara otomatis diimpor ke proyek Anda.

Saya memiliki masalah yang sama, dan saya memperbaikinya dengan menambahkan:

types: []

ke file tsconfig.json saya. Apa yang dilakukan adalah menonaktifkan TypeScript (dan dengan ekstensi VSCode) dari secara otomatis mengimpor semua paket node yang sedang bersama @types/ke dalam konfigurasi proyek. Ini tidak mencegah TS dari mengimpor definisi tipe tersebut jika Anda secara eksplisit mengimpor paket menggunakan tipe-tipe itu.

Dalam kasus khusus saya, consoledefinisi itu berasal @types/node, yang telah diimpor ke proyek sebagai ketergantungan dari Storybook. Namun, proyek saya adalah proyek webpack, yang dimaksudkan untuk berjalan di browser, jadi mengimpor jenis Node.js ke kode sumber saya tidak masuk akal. Set dasar jenis yang ingin Anda gunakan di browser adalah tipe dom, bukan tipe node.

Bergantung pada proyek Anda, Anda mungkin harus menambahkan set paket tipe dasar secara eksplisit ke dalam parameter tipe ( types: ["dom", "react"]dan seterusnya). Namun, dalam kasus saya ini ternyata tidak perlu, proyek saya dapat dikompilasi dengan daftar kosong. Dan kecenderungan VSCode untuk secara otomatis mengimpor 'konsol' tampaknya telah sepenuhnya hilang; Saya belum melihat efek buruk lainnya sejauh ini.

Informasi lebih lanjut tentang pengaturan jenis di tsconfig.json di sini: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Talin
sumber