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.


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;
}

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.


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


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

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.