vscode import console de importação = require ("console"); automaticamente

145
import console = require("console");

console.<< eu digito. e acima é importado automaticamente no VScode. Alguém sabe como desativar isso?

(Presumo que seja uma das minhas extensões. Provavelmente mais bonita.)

editar: isso só acontece no ambiente React Typcript. não no texto datilografado sem reagir.

alma de dragão
fonte
alguma sorte com isso? Estou tendo o mesmo problema
user2517182 20/1118
Além das soluções alternativas nas respostas, parece que este é um bug no VSCode introduzido com a última atualização. Um relatório de bug correspondente é preenchido aqui: github.com/Microsoft/vscode/issues/70157
ofhouse
1
O TS / JS Nightly Plugin corrige isso para o VSCode 1.36+
Andrew Li

Respostas:

126

Isenção de responsabilidade: isso não deve ser considerado "a solução", mas é o mais simples / rápido.

Esta resposta está assumindo que você está usando o VSCode. Outros IDEs devem ser semelhantes.

  1. Começe a digitar console
  2. Clique em entrar ou digite ., permitindo que o IntelliSense adicioneimport console = require("console");
  3. Ctrl + clique (ou F12 ou Cmd + clique no macOS) em require("console")
  4. Comente este código:
declare module "console" {
    export = console;
}
ZenVentzi
fonte
9
Se este fosse o Reddit, eu estaria lhe dando ouro por este. Obrigado :)
FearMediocrity
5
Funciona bem. Deve ser Cmd + clique no "console"entanto, mas isso é um detalhe. Obrigado!
Loolooii 16/05/19
Se tiver problemas com F12 ou Cmd + clique, clique direito sobre "console" e depois "ir para definição" também funciona (pelo menos no OSX)
imekinox
2
Isso está editando um arquivo dentro do diretório node_modules, o que significa que a 'correção' será redefinida quando você instalar novamente o npm. Eu recebo é uma solução rápida, mas não onde perto aceitável
Railto
Para todos aqueles que não deseja modificar um arquivo de declaração, o JS noite Plugin TS / corrige isso para VSCode 1.36+
Andrew Li
31

Eu experimentei isso também e parece haver um problema com o recurso Auto Import no VSCode. Desativar todas as extensões também não parece fazer com que ela desapareça.

Como solução alternativa, você pode desativar as importações automáticas nas configurações.

Se você usa Javascript

"javascript.suggest.autoImports": false

Se você usa o Typecript

"typescript.suggest.autoImports": false

insira a descrição da imagem aqui

EDIT: A importação automática defeituosa ocorre devido a este código em um pacote na árvore de dependência

declare module "console" {
    export = console;
}

O pacote pode estar localizado no diretório node_modules local ou em um pacote referenciado instalado globalmente.

  1. Procure nos node_modules locais por declare module "console"
  2. Se você o encontrar em um pacote local, execute npm list [packageName]para determinar qual pacote no package.json depende do pacote com o código do console.

Se você não encontrar código no node_modules local, poderá

  1. Eliminar os pacotes um por um no package.json

  2. Procure o código do console em módulos instalados globalmente que podem ser referenciados por pacotes no seu projeto

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

Sei que não é uma solução direta, mas espero que ajude, no meu caso, tive uma referência do nó react-native-copilot -> rimraf -> que continha o código do console. A remoção do react-native-copilot resolveu o problema.

KvD
fonte
8
Sim, isso também não causa mais nenhum trabalho de importação automática. Eu gosto desse recurso e não aceito isso como resposta ...: - D (obrigado!) Deve haver outra solução. Eu ainda estou olhando também.
dragonsoul
Eu descobri que isso não acontece quando você cria um novo projeto com create-react-app my-app - scripts-versão = react-scripts-ts, portanto, ele deve estar conectado às configurações da área de trabalho de alguma forma.
dragonsoul
Eu fiz mais algumas pesquisas, veja a resposta editada, espero que você a encontre no seu projeto!
KvD 23/11
1
Sim Isso funcionou mesmo. Eu estou pensando, isso é um bug do VSCode ou dos criadores desses pacotes? Para mim, estava em @ types / node e @ types / react-dom. Obrigado :-)
dragonsoul 26/11/18
4
encontrou o código defeituoso dentro de "typescript/3.2/node_modules/@types/node/index.d.ts", que está dentro da ~/Library/Caches/pasta. Eu estou em um mac. Como está no meu espaço de trabalho em cache, apenas removi o código real: `` `lang-js declare module" console "{export = console; } `` `E funcionou!
jcperez-ch
17

A solução mais elegante que encontrei é criar um console.d.tsarquivo fictício em algum lugar do seu projeto:

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

Isso impedirá a importação automática.

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

Krzysztof Kaczor
fonte
Esta é uma solução elegante que pode ser registrada e funcionará em vários espaços de trabalho e dispositivos. Obrigado!
phsource
4
Por que obtenho “A expressão de uma atribuição de exportação deve ser um identificador ou nome qualificado em um ambiente context.ts (2714)”? Pode estar relacionado a alguma configuração no meu tsconfig.json?
Mehmet N. Yarar
Sim que pode ... Você pode verificar as minhas definições aqui: github.com/codechecks/monorepo/blob/master/tsconfig.json Ele funciona com o arquivo console.d.ts
Krzysztof Kaczor
17

Se você adicionar um snippet para inserção console.loge usá-lo, não haverá importação automática de "console"

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

aqui está o meu trecho:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}
Giorgio
fonte
5
Embora não seja uma solução, é inteligente e funciona quando você não pode excluir o pacote que está causando o problema, como indicado na resposta mais votada.
tibuurcio 29/01
Eu concordo com @tibuurcio. Inteligente solução alternativa, mas não posso aceitar isso como uma solução ...
dragonsoul
não funcionou. ele ainda importa automaticamente depois que eu escrevo o console e pressiono "." auto importações
Sr.Ghamkhar 14/02/19
1
@ mr-ghamkhar se você quiser usar o trecho acima, você só precisa escrever "cl" ou o que você colocar no "prefixo". Ele precisa ser algo diferente de "console" para evitar o comportamento de importação automática.
Giorgio
9

Se você gosta de mim, esquece "cl", pode usar vários prefixos nos trechos :)

{
    "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
fonte
1
A verdadeira resposta é :) preguiçoso
FOLOF
Esta é a melhor solução para mim, porque você não precisa de pacotes internos editar
Harrison
5

Uma maneira de impedir que isso aconteça é modificar o arquivo tsconfig.json para limitar o conjunto de tipos que são importados automaticamente para o seu projeto.

Eu tive esse mesmo problema e o corrigi adicionando:

types: []

no meu arquivo tsconfig.json. O que isso faz é desativar o TypeScript (e por extensão VSCode) de importar automaticamente todos os pacotes de nós existentes @types/na configuração do projeto. Isso não impede que o TS importe essas definições de tipo se você importar explicitamente um pacote usando esses tipos.

No meu caso específico, consolevinha a definição @types/node, que havia sido importada para o projeto como uma dependência do Storybook. No entanto, meu projeto era um webpack, destinado a ser executado em um navegador; portanto, importar tipos Node.js para o meu código-fonte não fazia sentido. O conjunto básico de tipos que você deseja usar em um navegador são tipos dom, não tipos de nós.

Dependendo do seu projeto, talvez seja necessário adicionar explicitamente o conjunto de pacotes do tipo base ao parâmetro types ( types: ["dom", "react"]e assim por diante). No entanto, no meu caso, isso acabou sendo desnecessário, meu projeto foi capaz de compilar muito bem com uma lista vazia. E a tendência do VSCode de importar automaticamente o 'console' parece ter desaparecido completamente; Até agora não notei outros efeitos nocivos.

Mais informações sobre como definir tipos no tsconfig.json aqui: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Talin
fonte