vscode importations import console = require («console»); automatiquement

145
import console = require("console");

console.<< Je tape. et au-dessus est importé automatiquement dans VScode. Quelqu'un sait comment désactiver cela?

(Je suppose que c'est l'une de mes extensions. Probablement plus jolie.)

edit: cela ne se produit que dans l'environnement React Typescript. pas dans Typescript sans réagir.

âme de dragon
la source
une chance avec ça? J'ai le même problème
user2517182
Outre les solutions de contournement dans les réponses, il semble que ce soit un bogue dans VSCode introduit avec la dernière mise à jour. Un rapport de bogue correspondant est rempli ici: github.com/Microsoft/vscode/issues/70157
ofhouse
1
Le plug -in TS / JS Nightly corrige ce problème pour VSCode 1.36+
Andrew Li

Réponses:

126

Avertissement: cela ne devrait pas être considéré comme "la solution" mais c'est la plus simple / la plus rapide.

Cette réponse suppose que vous utilisez VSCode. Les autres IDE devraient être similaires.

  1. Commencer à écrire console
  2. Cliquez sur Entrée ou tapez ., permettant à IntelliSense d'ajouterimport console = require("console");
  3. Ctrl + clic (ou F12, ou Cmd + clic sur macOS) sur require("console")
  4. Commentez ce code:
declare module "console" {
    export = console;
}
ZenVentzi
la source
9
Si c'était Reddit, je vous donnerais de l'or pour celui-ci. Merci :)
FearMediocrity
5
Fonctionne bien. Cela devrait être Cmd + clic "console", mais c'est un détail. Merci!
Loolooii
Si vous rencontrez des problèmes avec F12 ou Cmd + clic, faites un clic droit sur "console" puis "aller à la définition" fonctionne également (au moins sur osx)
imekinox
2
Il s'agit de modifier un fichier dans le répertoire node_modules, ce qui signifie que le `` correctif '' sera réinitialisé une fois que vous aurez à nouveau installé npm. Je comprends que c'est une solution rapide mais pas acceptable
Railto
Pour tous ceux qui ne veulent pas modifier un fichier de déclaration, le TS / JS Nightly Plugin corrige cela pour VSCode 1.36+
Andrew Li
31

J'ai également vécu cela et cela semble être un problème avec la fonction d'importation automatique de VSCode. La désactivation de toutes les extensions ne semble pas non plus la faire disparaître.

Pour contourner ce problème, vous pouvez désactiver les importations automatiques dans les paramètres.

Si vous utilisez Javascript

"javascript.suggest.autoImports": false

Si vous utilisez Typescript

"typescript.suggest.autoImports": false

entrez la description de l'image ici

EDIT: l'autoimportation défectueuse se produit à cause de ce code dans un package dans l'arborescence des dépendances

declare module "console" {
    export = console;
}

Le package peut être situé dans votre répertoire node_modules local ou dans un package référencé installé globalement.

  1. Recherchez dans vos node_modules locaux declare module "console"
  2. Si vous le trouvez dans un package local, exécutez npm list [packageName]pour déterminer quel package de package.json dépend du package contenant le code de la console.

Si vous ne trouvez pas de code dans vos node_modules locaux, vous pouvez non plus

  1. Éliminez les packages un par un dans package.json

  2. Recherchez le code de la console dans les modules installés globalement qui peuvent être référencés par les packages de votre projet

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

Je sais que ce n'est pas une solution simple mais j'espère que cela aide, dans mon cas, j'avais une référence de react-native-copilot -> rimraf -> node qui contenait le code de la console. La suppression de react-native-copilot a résolu le problème.

KvD
la source
8
oui, cela ne cause plus aucun autre travail d'importation automatique. J'aime cette fonctionnalité et n'accepte pas cela comme une réponse ...: - D (merci quand même!) Il doit y avoir une autre solution. Je cherche toujours aussi.
dragonsoul
J'ai découvert que cela ne se produit pas lorsque vous créez un nouveau projet avec create-react-app my-app --scripts-version = react-scripts-ts, il doit donc être connecté aux paramètres de l'espace de travail.
dragonsoul
J'ai fait quelques recherches supplémentaires, voir la réponse éditée, j'espère que vous la trouverez dans votre projet!
KvD
1
Oui, cela a fonctionné en effet. Je pense, est-ce un bogue VSCode ou des créateurs de ces paquets? Pour moi, c'était dans @ types / node et @ types / react-dom. Merci :-)
dragonsoul
4
a trouvé le code défectueux dans "typescript/3.2/node_modules/@types/node/index.d.ts" qui se trouve dans le ~/Library/Caches/dossier. Je suis sur un mac. Comme il se trouve dans mon espace de travail de mise en cache, je viens de supprimer le code actuel: `` `` lang-js declare module "console" {export = console; } `` Et ça a marché!
jcperez-ch
17

La solution la plus élégante que j'ai trouvée est de créer un console.d.tsfichier factice quelque part dans votre projet:

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

Cela empêchera l'importation automatique.

Crédits: https://github.com/Microsoft/TypeScript/issues/30471#issuecomment-474963436

Krzysztof Kaczor
la source
Il s'agit d'une solution élégante qui peut être archivée et fonctionnera sur plusieurs espaces de travail et appareils. Merci!
phsource
4
Pourquoi est-ce que j'obtiens «L'expression d'une affectation d'exportation doit être un identifiant ou un nom qualifié dans un contexte ambiant.ts (2714)»? Cela pourrait être lié à un paramètre de mon tsconfig.json?
Mehmet N.Yarar
Oui, cela pourrait ... Vous pouvez vérifier mes paramètres ici: github.com/codechecks/monorepo/blob/master/tsconfig.json Cela fonctionne avec le fichier console.d.ts
Krzysztof Kaczor
17

Si vous ajoutez un extrait de code à insérer console.loget que vous l'utilisez à la place, il n'y aura pas d'importation automatique de "console"

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

voici mon extrait:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}
Giorgio
la source
5
Bien que ce ne soit pas une solution, c'est intelligent et cela fonctionne lorsque vous ne pouvez pas supprimer le package qui cause le problème, comme indiqué dans la réponse la plus votée.
tibuurcio
Je suis d'accord avec @tibuurcio. Solution de contournement intelligente, mais je ne peux pas accepter cela comme une solution ...
dragonsoul
n'a pas fonctionné. il importe toujours automatiquement après avoir écrit la console puis j'appuie sur "." it auto importations
Mr.Ghamkhar
1
@ mr-ghamkhar si vous voulez utiliser l'extrait ci-dessus, il vous suffit d'écrire "cl" ou ce que vous mettez dans "prefix". Il doit être autre chose que "console" pour pouvoir éviter le comportement d'autoimport.
Giorgio
9

Si vous comme moi oubliez "cl", vous pouvez utiliser plusieurs préfixes dans les extraits :)

{
    "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
la source
1
La vraie réponse est paresseux :)
FOLOF
C'est la meilleure solution pour moi, car vous n'avez pas besoin de modifier les packages internes
Harrison
5

Une façon d'éviter cela est de modifier votre fichier tsconfig.json pour limiter l'ensemble de types qui sont automatiquement importés dans votre projet.

J'ai eu ce même problème, et je l'ai résolu en ajoutant:

types: []

dans mon fichier tsconfig.json. Cela empêche TypeScript (et par extension VSCode) d'importer automatiquement tous les packages de nœuds avec @types/dans la configuration du projet. Cela n'empêche pas TS d'importer ces définitions de type si vous importez explicitement un package utilisant ces types.

Dans mon cas particulier, la consoledéfinition venait de @types/node, qui avait été importée dans le projet en tant que dépendance de Storybook. Cependant, mon projet était un projet Webpack, destiné à s'exécuter dans un navigateur, donc importer des types Node.js dans mon code source n'avait aucun sens. L'ensemble de base des types que vous souhaitez utiliser dans un navigateur sont des types dom, pas des types de nœuds.

Selon votre projet, vous devrez peut-être ajouter explicitement l'ensemble des packages de type de base dans le paramètre types ( types: ["dom", "react"]et ainsi de suite). Cependant, dans mon cas, cela s'est avéré inutile, mon projet a pu se compiler très bien avec une liste vide. Et la tendance de VSCode à importer automatiquement la «console» semble avoir complètement disparu; Je n'ai pas remarqué d'autres effets néfastes jusqu'à présent.

Plus d'informations sur la configuration des types dans tsconfig.json ici: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Talin
la source