vscode importiert import console = require ("console"); automatisch

145
import console = require("console");

console.<< Ich tippe. und höher wird automatisch in VScode importiert. Weiß jemand, wie man das deaktiviert?

(Ich nehme an, es ist eine meiner Erweiterungen. Wahrscheinlich hübscher.)

Bearbeiten: Dies geschieht nur in der React Typescript-Umgebung. nicht in Typescript ohne zu reagieren.

Drachenseele
quelle
Hast du Glück damit? Ich habe das gleiche Problem
user2517182
Neben den Problemumgehungen in den Antworten scheint dies ein Fehler in VSCode zu sein, der mit dem letzten Update eingeführt wurde. Ein entsprechender Fehlerbericht wird hier ausgefüllt: github.com/Microsoft/vscode/issues/70157
ofhouse
1
Das TS / JS Nightly Plugin behebt dies für VSCode 1.36+
Andrew Li

Antworten:

126

Haftungsausschluss: Dies sollte nicht als "die Lösung" betrachtet werden, aber es ist die einfachste / schnellste.

Bei dieser Antwort wird davon ausgegangen, dass Sie VSCode verwenden. Andere IDEs sollten ähnlich sein.

  1. Anfangen zu tippen console
  2. Klicken Sie auf die Eingabetaste oder geben Sie ein ., um IntelliSense zuzulassen hinzufügen kannimport console = require("console");
  3. Strg + Klick (oder F12 oder Cmd + Klick auf macOS) auf require("console")
  4. Kommentieren Sie diesen Code aus:
declare module "console" {
    export = console;
}
ZenVentzi
quelle
9
Wenn dies Reddit wäre, würde ich dir Gold für diesen geben. Danke :)
FearMediocrity
5
Funktioniert gut. Es sollte zwar Cmd + Klick sein "console", aber das ist ein Detail. Vielen Dank!
Loolooii
Wenn Sie Probleme mit F12 oder Cmd + haben, klicken Sie mit der rechten Maustaste auf "Konsole" und dann "Zur Definition gehen" funktioniert auch (zumindest auf osx)
imekinox
2
Dies ist das Bearbeiten einer Datei im Verzeichnis node_modules, was bedeutet, dass das 'Fix' zurückgesetzt wird, sobald Sie eine npm-Installation erneut durchführen. Ich
verstehe
Für alle, die keine Deklarationsdatei ändern möchten, behebt das TS / JS Nightly Plugin dies für VSCode 1.36+
Andrew Li
31

Ich habe dies ebenfalls erlebt und es scheint ein Problem mit der Auto-Import-Funktion in VSCode zu sein. Das Deaktivieren aller Erweiterungen scheint auch nicht zu verschwinden.

Um dieses Problem zu umgehen, können Sie Autoimporte in den Einstellungen deaktivieren.

Wenn Sie Javascript verwenden

"javascript.suggest.autoImports": false

Wenn Sie Typescript verwenden

"typescript.suggest.autoImports": false

Geben Sie hier die Bildbeschreibung ein

BEARBEITEN: Der fehlerhafte Autoimport tritt aufgrund dieses Codes in einem Paket im Abhängigkeitsbaum auf

declare module "console" {
    export = console;
}

Das Paket kann sich entweder in Ihrem lokalen Verzeichnis node_modules oder in einem global installierten Paket befinden, auf das verwiesen wird.

  1. Suchen Sie in Ihren lokalen node_modules nach declare module "console"
  2. Wenn Sie es in einem lokalen Paket finden, führen Sie es aus, um npm list [packageName]festzustellen, welches Paket in package.json von dem Paket mit dem darin enthaltenen Konsolencode abhängig ist.

Wenn Sie in Ihren lokalen node_modules keinen Code finden, können Sie dies auch tun

  1. Beseitigen Sie Pakete einzeln in package.json

  2. Suchen Sie in global installierten Modulen nach dem Konsolencode, auf den möglicherweise Pakete in Ihrem Projekt verweisen

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

Ich weiß, dass es keine einfache Lösung ist, aber ich hoffe, es hilft. In meinem Fall hatte ich eine Referenz vom React-Native-Copilot -> Rimraf -> Knoten, die den Konsolencode enthielt. Das Entfernen des reaktionsnativen Copiloten löste das Problem.

KvD
quelle
8
Ja, das verursacht auch keine andere automatische Importarbeit mehr. Ich mag diese Funktion und akzeptiere sie nicht als Antwort ...: - D (danke!) Es muss eine andere Lösung geben. Ich suche immer noch auch.
Drachenseele
Ich habe herausgefunden, dass es nicht passiert, wenn Sie ein neues Projekt mit create-react-app my-app --scripts-version = react-scripts-ts erstellen, sodass es irgendwie mit den Arbeitsbereichseinstellungen verbunden sein muss.
Drachenseele
Ich habe noch etwas recherchiert, sehe die bearbeitete Antwort, hoffe du findest sie in deinem Projekt!
KvD
1
Ja, das hat tatsächlich funktioniert. Ich denke, ist dies ein VSCode-Fehler oder von den Erstellern dieser Pakete? Für mich war es in @ types / node und @ types / react-dom. Vielen Dank :-)
Drachenseele
4
Der fehlerhafte Code wurde im ~/Library/Caches/Ordner "typescript/3.2/node_modules/@types/node/index.d.ts" gefunden . Ich bin auf einem Mac. Da es sich in meinem Caching-Arbeitsbereich befindet, habe ich gerade den eigentlichen Code entfernt: `` `lang-js deklariert das Modul" console "{export = console; } `` `Und es hat funktioniert!
jcperez-ch
17

Die eleganteste Lösung, die ich gefunden habe, besteht darin, console.d.tsirgendwo in Ihrem Projekt eine Dummy- Datei zu erstellen :

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

Dadurch wird der automatische Import verhindert.

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

Krzysztof Kaczor
quelle
Dies ist eine elegante Lösung, die eingecheckt werden kann und über mehrere Arbeitsbereiche und Geräte hinweg funktioniert. Vielen Dank!
Phsource
4
Warum erhalte ich die Meldung "Der Ausdruck einer Exportzuweisung muss eine Kennung oder ein qualifizierter Name in einem Umgebungskontext sein.ts (2714)"? Könnte mit einer Einstellung in meiner tsconfig.json zusammenhängen?
Mehmet N. Yarar
Ja, es könnte ... Sie können meine Einstellungen hier überprüfen: github.com/codechecks/monorepo/blob/master/tsconfig.json Es funktioniert mit der Datei console.d.ts
Krzysztof Kaczor
17

Wenn Sie ein Snippet zum Einfügen hinzufügen console.logund dieses stattdessen verwenden, wird "Konsole" nicht automatisch importiert.

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

Hier ist mein Ausschnitt:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}
Giorgio
quelle
5
Obwohl dies keine Lösung ist, ist es clever und funktioniert, wenn Sie das Paket, das das Problem verursacht, nicht löschen können, wie in der Antwort mit den meisten Stimmen angegeben.
Tibuurcio
Ich stimme @tibuurcio zu. Clevere Problemumgehung, aber ich kann dies nicht als Lösung akzeptieren ...
Drachenseele
hat nicht funktioniert. Es importiert immer noch automatisch, nachdem ich die Konsole geschrieben habe, und drücke dann "." es automatisch importiert
Mr. Ghamkhar
1
@ mr-ghamkhar Wenn Sie das obige Snippet verwenden möchten, müssen Sie nur "cl" oder was auch immer Sie in "Präfix" eingeben. Es muss etwas anderes als "Konsole" sein, um das Autoimport-Verhalten vermeiden zu können.
Giorgio
9

Wenn du magst, dass ich "cl" vergesse, kannst du mehrere Präfixe in Snippets verwenden :)

{
    "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
quelle
1
Die wahre Antwort ist faul :)
FOLOF
Dies ist die beste Lösung für mich, da Sie keine internen Pakete bearbeiten müssen
Harrison
5

Eine Möglichkeit, dies zu verhindern, besteht darin, die Datei tsconfig.json zu ändern, um die Anzahl der Typen zu begrenzen, die automatisch in Ihr Projekt importiert werden.

Ich hatte das gleiche Problem und habe es behoben, indem ich hinzugefügt habe:

types: []

in meine tsconfig.json-Datei. Dadurch wird verhindert, dass TypeScript (und damit auch VSCode) automatisch alle Knotenpakete @types/in die Projektkonfiguration importiert . Dies hindert TS nicht daran, diese Typdefinitionen zu importieren, wenn Sie ein Paket explizit mit diesen Typen importieren.

In meinem speziellen Fall kam die consoleDefinition von@types/node , die als Abhängigkeit von Storybook in das Projekt importiert worden war. Mein Projekt war jedoch ein Webpack-Projekt, das in einem Browser ausgeführt werden sollte. Daher machte es keinen Sinn, Node.js-Typen in meinen Quellcode zu importieren. Die Basisgruppe von Typen, die Sie in einem Browser verwenden möchten, sind Dom-Typen, keine Knotentypen.

Abhängig von Ihrem Projekt müssen Sie möglicherweise den Satz von Basistyppaketen explizit zum Parameter types hinzufügen ( types: ["dom", "react"]und so weiter). In meinem Fall stellte sich jedoch heraus, dass dies unnötig war. Mein Projekt konnte mit einer leeren Liste problemlos kompiliert werden. Und die Tendenz von VSCode, "Konsole" automatisch zu importieren, scheint vollständig verschwunden zu sein. Ich habe bisher keine anderen negativen Auswirkungen bemerkt.

Weitere Informationen zum Festlegen von Typen in tsconfig.json finden Sie hier: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Talin
quelle