vscode import import console = require („console”); automatycznie

145
import console = require("console");

console.<< Piszę. i powyżej są importowane automatycznie w VScode. Czy ktoś wie, jak to wyłączyć?

(Zakładam, że jest to jedno z moich rozszerzeń. Prawdopodobnie ładniejsze.)

edycja: dzieje się to tylko w środowisku React Typescript. nie w Maszynie bez reagowania.

Smocza dusza
źródło
szczęście z tym? Mam ten sam problem
user2517182
Poza obejściami w odpowiedziach wydaje się, że jest to błąd w VSCode wprowadzony w ostatniej aktualizacji. Odpowiedni raport błędu jest wypełniony tutaj: github.com/Microsoft/vscode/issues/70157
ofhouse
1
TS / JS Nightly Plugin rozwiązuje to dla VSCode 1.36+
Andrew Li

Odpowiedzi:

126

Zastrzeżenie: nie należy tego uważać za „rozwiązanie”, ale jest to najprostsze / najszybsze.

Ta odpowiedź zakłada, że ​​używasz VSCode. Inne IDE powinny być podobne.

  1. Zacznij pisać console
  2. Kliknij Enter lub wpisz ., zezwalając IntelliSense na dodanieimport console = require("console");
  3. Ctrl + kliknięcie (lub F12 lub Cmd + kliknięcie w systemie macOS) włączone require("console")
  4. Skomentuj ten kod:
declare module "console" {
    export = console;
}
ZenVentzi
źródło
9
Gdyby to był Reddit, dałbym ci za to złoto. Dzięki :)
FearMediocrity
5
Działa ładnie. Powinien to być Cmd + kliknięcie "console", ale to szczegół. Dzięki!
Loolooii
Jeśli masz problem z F12 lub Cmd + klik, kliknij prawym przyciskiem myszy na "konsolę", a następnie "przejdź do definicji" również działa (przynajmniej na osx)
imekinox
2
To jest edycja pliku w katalogu node_modules, co oznacza, że ​​'poprawka' zostanie zresetowana po ponownym wykonaniu instalacji npm. Rozumiem, że to szybka naprawa, ale nie jest to prawie do zaakceptowania
Railto
Dla wszystkich, którzy nie chcą modyfikować pliku deklaracji, wtyczka TS / JS Nightly naprawia to dla VSCode 1.36+
Andrew Li
31

Ja również tego doświadczyłem i wydaje się, że jest to problem z funkcją automatycznego importu w VSCode. Wyłączenie wszystkich rozszerzeń również nie powoduje jego zniknięcia.

Aby obejść ten problem, możesz wyłączyć automatyczne importowanie w ustawieniach.

Jeśli używasz Javascript

"javascript.suggest.autoImports": false

Jeśli używasz Typescript

"typescript.suggest.autoImports": false

wprowadź opis obrazu tutaj

EDYCJA: Błędny automatyczny import występuje z powodu tego kodu w pakiecie w drzewie zależności

declare module "console" {
    export = console;
}

Pakiet może znajdować się w lokalnym katalogu node_modules lub we wspomnianym pakiecie zainstalowanym globalnie.

  1. Wyszukaj w swoich lokalnych modułach node_modules declare module "console"
  2. Jeśli znajdziesz go w pakiecie lokalnym, uruchom, npm list [packageName]aby określić, który pakiet w package.json jest zależny od pakietu zawierającego kod konsoli.

Jeśli nie znajdziesz kodu w lokalnych modułach node_modules, możesz to zrobić

  1. Eliminuj pakiety jeden po drugim w package.json

  2. Wyszukaj kod konsoli w globalnie zainstalowanych modułach, do których mogą się odwoływać pakiety w projekcie

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

Wiem, że nie jest to proste rozwiązanie, ale mam nadzieję, że pomoże, w moim przypadku miałem odniesienie z węzła react-native-copilot -> rimraf ->, który zawierał kod konsoli. Usunięcie reagowania-natywnego-drugiego pilota rozwiązało problem.

KvD
źródło
8
tak, to również nie powoduje już żadnego innego automatycznego importu. Podoba mi się ta funkcja i nie akceptuję jej jako odpowiedzi ...: - D (dzięki!) Musi być inne rozwiązanie. Ja też wciąż wyglądam.
dragonsoul
Dowiedziałem się, że tak się nie dzieje, gdy tworzysz nowy projekt za pomocą aplikacji create-react-my-app --scripts-version =reak-scripts-ts, więc musi być jakoś połączony z ustawieniami obszaru roboczego.
dragonsoul
Zrobiłem więcej badań, zobacz zredagowaną odpowiedź, mam nadzieję, że znajdziesz ją w swoim projekcie!
KvD
1
Tak, to rzeczywiście zadziałało. Myślę, czy to błąd VSCode czy od twórców tych pakietów? U mnie było to w @ types / node i @ types / respons-dom. Dziękuję :-)
dragonsoul
4
Znalazłem wadliwy kod w „typescript/3.2/node_modules/@types/node/index.d.ts”, który znajduje się w ~/Library/Caches/folderze. Jestem na Macu. Ponieważ znajduje się w moim obszarze roboczym buforowania, właśnie usunąłem rzeczywisty kod: `` lang-js deklaruje moduł "console" {export = console; } `` I zadziałało!
jcperez-ch
17

Najbardziej eleganckim rozwiązaniem, jakie znalazłem, jest utworzenie console.d.tsw projekcie atrapy pliku:

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

Zapobiegnie to automatycznemu importowaniu.

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

Krzysztof Kaczor
źródło
Jest to eleganckie rozwiązanie, które można zarejestrować i będzie działać na wielu obszarach roboczych i urządzeniach. Dzięki!
phsource,
4
Dlaczego otrzymuję komunikat „Wyrażenie przypisania eksportu musi być identyfikatorem lub kwalifikowaną nazwą w otoczeniu context.ts (2714)”? Może to być związane z jakimś ustawieniem w moim pliku tsconfig.json?
Mehmet N. Yarar
Tak, mogłoby ... Moje ustawienia możesz sprawdzić tutaj: github.com/codechecks/monorepo/blob/master/tsconfig.json Działa z plikiem console.d.ts
Krzysztof Kaczor
17

Jeśli dodasz fragment do wstawienia console.logi użyjesz go zamiast tego, nie będzie automatycznego importu „konsoli”

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

oto mój fragment:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}
Giorgio
źródło
5
Chociaż nie jest to rozwiązanie, jest sprytne i działa, gdy nie można usunąć pakietu, który powoduje problem, jak stwierdzono w większości głosowanych odpowiedzi.
tibuurcio
Zgadzam się z @tibuurcio. Sprytne obejście, ale nie mogę zaakceptować tego jako rozwiązania ...
dragonsoul
nie zadziałało. nadal automatycznie importuje po napisaniu konsoli, a następnie naciśnięciu "." to auto import
Pan Ghamkhar
1
@ mr-ghamkhar, jeśli chcesz użyć powyższego fragmentu, wystarczy napisać „cl” lub cokolwiek wstawisz w „prefiks”. Musi to być coś innego niż „konsola”, aby można było uniknąć zachowania automatycznego importu.
Giorgio,
9

Jeśli tak jak ja zapomniałeś o "cl", możesz użyć wielu przedrostków we fragmentach :)

{
    "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
źródło
1
Prawdziwa odpowiedź jest leniwa :)
FOLOF
To dla mnie najlepsze rozwiązanie, ponieważ nie musisz edytować wewnętrznych pakietów
Harrison
5

Jednym ze sposobów, aby temu zapobiec, jest zmodyfikowanie pliku tsconfig.json w celu ograniczenia zestawu typów, które są automatycznie importowane do projektu.

Miałem ten sam problem i naprawiłem go dodając:

types: []

do mojego pliku tsconfig.json. To powoduje, że TypeScript (i przez rozszerzenie VSCode) uniemożliwia automatyczne importowanie wszystkich pakietów węzłów, które są @types/w konfiguracji projektu. Nie zapobiega to importowaniu przez TS tych definicji typów, jeśli jawnie zaimportujesz pakiet przy użyciu tych typów.

W moim konkretnym przypadku consoledefinicja pochodziła z @types/node, która została zaimportowana do projektu jako zależność Storybook. Jednak mój projekt był projektem pakietu internetowego, przeznaczonym do uruchamiania w przeglądarce, więc importowanie typów Node.js do mojego kodu źródłowego nie miało sensu. Podstawowy zestaw typów, których chcesz używać w przeglądarce, to typy dom, a nie typy węzłów.

W zależności od projektu może być konieczne jawne dodanie zestawu pakietów typu podstawowego do parametru types ( types: ["dom", "react"]i tak dalej). Jednak w moim przypadku okazało się to niepotrzebne, mój projekt był w stanie skompilować się dobrze z pustą listą. Wydaje się, że tendencja VSCode do automatycznego importowania „konsoli” całkowicie zniknęła; Jak dotąd nie zauważyłem żadnych innych złych efektów.

Więcej informacji na temat ustawień typów w tsconfig.json tutaj: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Talin
źródło