vscode içe aktarım konsolu = gerektirir ("konsol"); otomatik olarak


146
import console = require("console");

console.<< Yazıyorum. ve üstü VScode'da otomatik olarak içe aktarılır. Bunu nasıl devre dışı bırakacağını bilen var mı?

(Uzantılarımdan biri olduğunu varsayıyorum. Muhtemelen Daha Güzel.)

edit: sadece React Typescript ortamında olur. React olmadan Typescript'te değil.


bunda şans var mı? Aynı sorunu yaşıyorum
user2517182

Yanıtlardaki geçici çözümlerin yanı sıra, bunun son güncellemede sunulan VSCode'daki bir hata olduğu görülüyor. Karşılık gelen bir hata raporu burada doldurulur: github.com/Microsoft/vscode/issues/70157
ofhouse

1
TS / JS Gecelik Eklentisi 1.36+ VSCode için bu düzeltir
Andrew Li

Yanıtlar:


127

Sorumluluk reddi: Bu "çözüm" olarak görülmemelidir, ancak en basit / en hızlısıdır.

Bu cevap, VSCode kullandığınızı varsaymaktadır. Diğer IDE'ler benzer olmalıdır.

  1. Yazmaya başlayın console
  2. IntelliSense'in eklenmesine .izin vererek girin veya yazınimport console = require("console");
  3. Ctrl + tıklama (veya F12 veya macOS'te Cmd + tıklama) require("console")
  4. Bu kodu yorumlayın:
declare module "console" {
    export = console;
}

9
Bu Reddit olsaydı, bunun için sana altın verirdim. Teşekkürler :)
FearMediocrity

5
Güzel çalışıyor. Yine de Cmd + tıklama olmalı "console", ama bu bir detay. Teşekkürler!
Loolooii

F12 veya Cmd + tıklama ile sorun yaşıyorsanız, "konsola" sağ tıklayın ve ardından "tanıma git" de çalışır (en azından
osx'te

2
Bu, node_modules dizini içindeki bir dosyayı düzenlemektir, yani bir npm kurulumunu tekrar yaptığınızda 'düzeltme' sıfırlanacaktır. Hızlı bir düzeltme
anlıyorum

Bir bildirim dosyasını değiştirmek istemeyenler için TS / JS Nightly Plugin bunu VSCode 1.36+ için düzeltir
Andrew Li

31

Ben de bunu yaşadım ve VSCode'daki Otomatik İçe Aktarma özelliğiyle ilgili bir sorun gibi görünüyor. Tüm uzantıların devre dışı bırakılması da onu ortadan kaldırmaz.

Geçici bir çözüm olarak, otomatik ithalatı ayarlardan devre dışı bırakabilirsiniz.

Javascript kullanıyorsanız

"javascript.suggest.autoImports": false

Typescript kullanıyorsanız

"typescript.suggest.autoImports": false

görüntü açıklamasını buraya girin

DÜZENLEME: Hatalı otomatik içe aktarma, bağımlılık ağacındaki bir paketteki bu kod nedeniyle oluşur

declare module "console" {
    export = console;
}

Paket, yerel node_modules dizininizde veya global olarak yüklenmiş başvurulan bir pakette bulunabilir.

  1. Yerel node_modüllerinizde arayın declare module "console"
  2. Bunu yerel bir pakette bulursanız npm list [packageName], package.json'daki hangi paketin konsol kodunun içinde bulunduğu pakete bağımlı olduğunu belirlemek için çalıştırın .

Yerel node_modüllerinizde kodu bulamazsanız,

  1. Package.json'daki paketleri tek tek ortadan kaldırın

  2. Projenizdeki paketler tarafından referans verilebilecek küresel olarak yüklenmiş modüllerde konsol kodunu arayın

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

Bunun basit bir çözüm olmadığını biliyorum ama umarım yardımcı olur, benim durumumda konsol kodunun bulunduğu react-native-copilot -> rimraf -> düğümünden bir referans aldım. React-native-yardımcı pilotun kaldırılması sorunu çözdü.


8
evet bu artık başka bir otomatik içe aktarma çalışmasına da neden olmuyor. Bu özelliği beğendim ve cevap olarak kabul etmiyorum ...: - D (yine de teşekkürler!) Başka bir çözüm olmalı. Ben de hala arıyorum.
dragonsoul

Create-react-app my-app --scripts-version = react-scripts-ts ile yeni bir proje oluşturduğunuzda bunun olmadığını öğrendim, bu yüzden çalışma alanı ayarlarına bir şekilde bağlanması gerekiyor.
dragonsoul

Biraz daha araştırma yaptım, düzenlenen cevaba baktım, umarım projenizde bulursunuz!
KvD

1
Evet, gerçekten işe yaradı. Düşünüyorum da, bu bir VSCode hatası mı yoksa bu paketlerin yaratıcılarından mı? Benim için @ types / node ve @ types / react-dom içindeydi. Teşekkür ederim :-)
dragonsoul

4
~/Library/Caches/klasörün içindeki "typescript/3.2/node_modules/@types/node/index.d.ts" içinde hatalı kodu buldu . Mac kullanıyorum. Önbelleğe alma çalışma alanımda olduğu için gerçek kodu kaldırdım: `` lang-js declare module "console" {export = console; } `` Ve işe yaradı!
jcperez-ch

17

Bulduğum en zarif çözüm console.d.ts, projenizin herhangi bir yerinde kukla dosya oluşturmak :

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

Bu, otomatik içe aktarmayı önleyecektir.

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


Bu, kontrol edilebilen ve birden çok çalışma alanı ve cihazda çalışacak zarif bir çözümdür. Teşekkürler!
phsource

4
Neden "Bir dışa aktarma atamasının ifadesi, ortam bağlamında bir tanımlayıcı veya nitelenmiş bir ad olmalıdır. T (2714)" alıyorum? Tsconfig.json dosyamdaki bazı ayarlarla ilgili olabilir mi?
Mehmet N. Yarar

Evet olabilir ... Ayarlarımı buradan kontrol edebilirsiniz: github.com/codechecks/monorepo/blob/master/tsconfig.json console.d.ts dosyası ile çalışır
Krzysztof Kaczor

17

Eklemek için bir snippet ekler console.logve onun yerine kullanırsanız, "konsol" otomatik olarak içe aktarılmaz

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

İşte benim pasajım:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}

5
Bir çözüm olmasa da, akıllıca ve en çok oylanan cevapta belirtildiği gibi soruna neden olan paketi silemediğinizde çalışıyor.
tibuurcio

@Tibuurcio'ya katılıyorum. Akıllıca bir çözüm, ancak bunu bir çözüm olarak kabul
edemem

işe yaramadı. konsola yazdıktan sonra hala otomatik olarak içe aktarılıyor ve ardından "" tuşuna basıyorum. o otomatik ithal ediyor
Bay Ghamkhar

1
@ mr-ghamkhar Eğer yukarıdaki pasajı kullanmak istiyorsanız, sadece "cl" veya "önek" ne koyarsanız yazmanız yeterlidir. Otomatik içe aktarma davranışından kaçınmak için "konsol" dışında bir şey olması gerekir.
Giorgio

9

Eğer benim gibi "cl" yi unutursanız, snippet'lerde birden fazla önek kullanabilirsiniz :)

{
    "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"
    }   
}

1
Doğru cevap tembel :)
FOLOF

Bu benim için en iyi çözüm çünkü dahili paketleri düzenlemenize gerek yok
Harrison

5

Bunun olmasını önlemenin bir yolu, tsconfig.json dosyanızı, projenize otomatik olarak içe aktarılan tür kümesini sınırlandıracak şekilde değiştirmektir.

Aynı sorunu yaşadım ve ekleyerek düzelttim:

types: []

tsconfig.json dosyama. Bunun yaptığı şey, TypeScript'in (ve VSCode uzantısına göre) birlikte olan tüm düğüm paketlerini @types/proje yapılandırmasına otomatik olarak içe aktarmasını devre dışı bırakmaktır . Bu türleri kullanarak bir paketi açıkça içe aktarırsanız, bu, TS'nin bu tür tanımlarını içe aktarmasını engellemez.

Benim özel durumumda, consoletanım, @types/nodeStorybook'un bir bağımlılığı olarak projeye aktarılan tanımdan geliyordu . Bununla birlikte, projem bir tarayıcıda çalışması amaçlanan bir web paketi projesiydi, bu nedenle Node.js türlerini kaynak koduma aktarmanın bir anlamı yoktu. Bir tarayıcıda kullanmak isteyeceğiniz temel türler kümesi, düğüm türleri değil, etki alanı türleridir.

Projenize bağlı olarak, temel tür paketleri kümesini açıkça türler parametresine ( types: ["dom", "react"]vb.) Eklemeniz gerekebilir . Ancak, benim durumumda bunun gereksiz olduğu ortaya çıktı, projem boş bir listeyle gayet iyi bir şekilde derleyebildi. Ve VSCode'un 'konsolu' otomatik olarak içe aktarma eğilimi tamamen ortadan kalkmış görünüyor; Şimdiye kadar başka bir kötü etki fark etmedim.

Tsconfig.json'da türleri ayarlama hakkında daha fazla bilgiyi burada bulabilirsiniz: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.