vscode imports import console = request ("console"); automaticamente


145
import console = require("console");

console.<< Scrivo. e sopra viene importato automaticamente in VScode. Qualcuno sa come disabilitarlo?

(Suppongo sia una delle mie estensioni. Probabilmente più carina.)

modifica: succede solo nell'ambiente React Typescript. non in Typescript senza reagire.


qualche fortuna con questo? Sto
riscontrando

Oltre alle soluzioni alternative nelle risposte sembra che questo sia un bug in VSCode introdotto con l'ultimo aggiornamento. Una corrispondente segnalazione di bug viene compilata qui: github.com/Microsoft/vscode/issues/70157
ofhouse

1
Il plug-in notturno TS / JS risolve questo problema per VSCode 1.36+
Andrew Li

Risposte:


126

Disclaimer: questa non dovrebbe essere considerata "la soluzione" ma è la più semplice / veloce.

Questa risposta presuppone che tu stia utilizzando VSCode. Gli altri IDE dovrebbero essere simili.

  1. Iniziare a digitare console
  2. Fare clic su Invio o digitare ., consentendo l'aggiunta di IntelliSenseimport console = require("console");
  3. Ctrl + clic (o F12 o Cmd + clic su macOS) su require("console")
  4. Commenta questo codice:
declare module "console" {
    export = console;
}

9
Se questo fosse Reddit, ti darei oro per questo. Grazie :)
FearMediocrity

5
Funziona bene. Dovrebbe essere Cmd + clic su "console"però, ma questo è un dettaglio. Grazie!
Loolooii,

In caso di problemi con F12 o Cmd + clic, fare clic con il tasto destro su "console" e quindi anche "vai alla definizione" funziona (almeno su osx)
imekinox,

2
Questo sta modificando un file all'interno della directory node_modules, il che significa che la 'correzione' verrà ripristinata una volta eseguita nuovamente l'installazione di npm. Ho capito che è una soluzione rapida ma per nulla accettabile
Railto il

A tutti coloro che non vogliono modificare un file di dichiarazione, il plug-in notturno TS / JS risolve questo problema per VSCode 1.36+
Andrew Li

31

Ho riscontrato anche questo e sembra essere un problema con la funzione di importazione automatica in VSCode. Anche la disabilitazione di tutte le estensioni non sembra farla sparire.

Per ovviare al problema, è possibile disabilitare le autoimport nelle impostazioni.

Se usi Javascript

"javascript.suggest.autoImports": false

Se usi Typescript

"typescript.suggest.autoImports": false

inserisci qui la descrizione dell'immagine

EDIT: l'importazione automatica difettosa si verifica a causa di questo codice in un pacchetto lungo l'albero delle dipendenze

declare module "console" {
    export = console;
}

Il pacchetto può trovarsi nella directory node_modules locale o in un pacchetto di riferimento installato a livello globale.

  1. Cerca i tuoi node_modules locali per declare module "console"
  2. Se lo trovi in ​​un pacchetto locale, esegui npm list [packageName]per determinare quale pacchetto in package.json dipende dal pacchetto con al suo interno il codice della console.

Se non trovi il codice nel tuo node_modules locale, potresti farlo

  1. Elimina i pacchetti uno a uno in package.json

  2. Cerca il codice della console nei moduli installati a livello globale che possono essere referenziati dai pacchetti nel tuo progetto

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

So che non è una soluzione semplice ma spero che sia di aiuto, nel mio caso ho avuto un riferimento dal nodo reazioni-nativo-copilota -> rimraf -> che conteneva il codice console. La rimozione del reagente nativo-copilota ha risolto il problema.


8
sì, questo non causa più nessun altro lavoro di importazione automatica. Mi piace questa funzione e non la accetto come risposta ... MrGreen (grazie però!) Ci deve essere un'altra soluzione. Anche io sto ancora guardando.
dragonsoul,

Ho scoperto che non succede quando si crea un nuovo progetto con la mia-app -scripts-version = reply-scripts-ts di create-reagire-app, quindi in qualche modo deve essere collegato alle impostazioni dell'area di lavoro.
dragonsoul,

Ho fatto qualche ricerca in più, vedi la risposta modificata, spero che tu possa trovarla nel tuo progetto!
KvD,

1
Sì, ha funzionato davvero. Sto pensando, è un bug VSCode o dai creatori di questi pacchetti? Per me era in @ tipi / nodo e @ tipi / reazioni-dom. Grazie :-)
dragonsoul,

4
trovato il codice difettoso all'interno di "typescript/3.2/node_modules/@types/node/index.d.ts" che si trova all'interno della ~/Library/Caches/cartella. Sono su un mac. Dato che è nel mio spazio di lavoro nella cache, ho appena rimosso il codice attuale: `` `lang-js declare module" console "{export = console; } `` `E ha funzionato!
jcperez-ch,

17

La soluzione più elegante che ho trovato è quella di creare console.d.tsfile fittizi da qualche parte nel tuo progetto:

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

Ciò impedirà l'importazione automatica.

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


Questa è una soluzione elegante che può essere archiviata e funzionerà su più aree di lavoro e dispositivi. Grazie!
phsource,

4
Perché ottengo "L'espressione di un compito di esportazione deve essere un identificatore o un nome qualificato in un contesto context.ts (2714)"? Potrebbe essere correlato ad alcune impostazioni nel mio tsconfig.json?
Mehmet N. Yarar,

Sì, potrebbe ... Puoi controllare le mie impostazioni qui: github.com/codechecks/monorepo/blob/master/tsconfig.json Funziona con il file console.d.ts
Krzysztof Kaczor

17

Se aggiungi uno snippet per l'inserimento console.loge lo usi invece, non verrà eseguita l'importazione automatica di "console"

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

ecco il mio frammento:

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

5
Sebbene non sia una soluzione, è intelligente e funziona quando non è possibile eliminare il pacchetto che causa il problema, come indicato nella risposta più votata.
Tibet

Sono d'accordo con @tibuurcio. Soluzione alternativa, ma non posso accettarlo come soluzione ...
dragonsoul,

non ha funzionato. importa ancora automaticamente dopo aver scritto la console, quindi premo "." importa auto
Mr.Ghamkhar

1
@ mr-ghamkhar se vuoi usare lo snippet sopra devi solo scrivere "cl" o qualunque cosa tu abbia inserito in "prefisso". Deve essere qualcosa di diverso da "console" per evitare il comportamento di autoimportazione.
Giorgio,

9

Se ti piaccio dimentica "cl", puoi utilizzare più prefissi negli snippet :)

{
    "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
La vera risposta è pigra :)
FOLOF

Questa è la soluzione migliore per me, perché non è necessario modificare i pacchetti interni
Harrison,

5

Un modo per evitare che ciò accada è modificare il file tsconfig.json per limitare l'insieme di tipi che vengono importati automaticamente nel progetto.

Ho avuto lo stesso problema e l'ho risolto aggiungendo:

types: []

nel mio file tsconfig.json. Quello che fa è disabilitare TypeScript (e per estensione VSCode) dall'importazione automatica di tutti i pacchetti di nodi che si trovano @types/nella configurazione del progetto. Ciò non impedisce a TS di importare tali definizioni di tipo se si importa esplicitamente un pacchetto utilizzando tali tipi.

Nel mio caso specifico, la consoledefinizione veniva da @types/node, che era stata importata nel progetto come dipendenza del libro di fiabe. Tuttavia, il mio progetto era un progetto webpack, destinato ad essere eseguito in un browser, quindi l'importazione dei tipi Node.js nel mio codice sorgente non aveva senso. L'insieme di tipi di base che si desidera utilizzare in un browser sono tipi dom, non tipi di nodo.

A seconda del progetto, potrebbe essere necessario aggiungere esplicitamente il set di pacchetti di tipi base nel parametro types ( types: ["dom", "react"]e così via). Tuttavia, nel mio caso questo non è stato necessario, il mio progetto è stato in grado di compilare perfettamente con un elenco vuoto. E la tendenza di VSCode ad importare automaticamente "console" sembra essere completamente scomparsa; Finora non ho notato altri effetti negativi.

Maggiori informazioni sull'impostazione dei tipi in tsconfig.json qui: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.