Importaciones vscódigo importar consola = require ("consola"); automáticamente

145
import console = require("console");

console.<< escribo. y superior se importa automáticamente en VScode. ¿Alguien sabe cómo deshabilitar eso?

(Supongo que es una de mis extensiones. Probablemente más bonita).

editar: solo ocurre en el entorno React Typecript. no en mecanografiado sin reaccionar.

Alma de dragon
fuente
alguna suerte con esto? Tengo el mismo problema
user2517182
Además de las soluciones en las respuestas, parece que este es un error en VSCode introducido con la última actualización. Aquí se completa un informe de error correspondiente: github.com/Microsoft/vscode/issues/70157
ofhouse
1
El complemento nocturno TS / JS soluciona esto para VSCode 1.36+
Andrew Li

Respuestas:

126

Descargo de responsabilidad: esto no debe considerarse "la solución" pero es la más simple / rápida.

Esta respuesta supone que está usando VSCode. Otros IDE deben ser similares.

  1. Comienza a escribir console
  2. Haga clic en Intro o escriba ., permitiendo que IntelliSense agregueimport console = require("console");
  3. Ctrl + clic (o F12, o Cmd + clic en macOS) en require("console")
  4. Comenta este código:
declare module "console" {
    export = console;
}
ZenVentzi
fuente
9
Si esto fuera Reddit, te estaría dando oro por este. Gracias :)
FearMediocrity
55
Funciona bien Sin "console"embargo, debería ser Cmd + clic , pero eso es un detalle. ¡Gracias!
Loolooii
Si tiene problemas con F12 o Cmd + clic, haga clic derecho en "consola" y luego "ir a definición" también funciona (al menos en osx)
imekinox
2
Esto es editar un archivo dentro del directorio node_modules, lo que significa que el 'arreglo' se restablecerá una vez que realice una instalación npm nuevamente. Entiendo que es una solución rápida, pero no es aceptable
Railto
Para todos aquellos que no quieran modificar un archivo de declaración, el complemento nocturno TS / JS lo arregla para VSCode 1.36+
Andrew Li
31

Experimenté esto también y parece ser un problema con la función de importación automática en VSCode. Desactivar todas las extensiones tampoco parece hacer que desaparezca.

Como solución alternativa, puede deshabilitar las importaciones automáticas en la configuración.

Si usas Javascript

"javascript.suggest.autoImports": falso

Si usa mecanografiado

"typescript.suggest.autoImports": falso

ingrese la descripción de la imagen aquí

EDITAR: la importación automática defectuosa se produce debido a este código en un paquete en el árbol de dependencia

declare module "console" {
    export = console;
}

El paquete puede ubicarse en su directorio local node_modules o en un paquete referenciado instalado globalmente.

  1. Busque en su node_modules local para declare module "console"
  2. Si lo encuentra en un paquete local, ejecute npm list [packageName]para determinar qué paquete en package.json depende del paquete con el código de la consola.

Si no encuentra código en su nodo_módulo local, puede

  1. Eliminar paquetes uno por uno en package.json

  2. Busque el código de la consola en módulos instalados globalmente a los que pueden hacer referencia los paquetes en su proyecto

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

Sé que no es una solución sencilla, pero espero que ayude, en mi caso tuve una referencia de react-native-copilot -> rimraf -> node que tenía el código de la consola. La eliminación de react-native-copilot resolvió el problema.

KvD
fuente
8
Sí, eso ya no causa ningún otro trabajo de importación automática. Me gusta esta función y no la acepto como respuesta ...: - D (¡aunque gracias!) Debe haber otra solución. Todavía estoy mirando también.
Dragonsoul
Descubrí que no sucede cuando crea un nuevo proyecto con create-react-app my-app --scripts-version = react-scripts-ts, por lo que debe estar conectado a la configuración del espacio de trabajo de alguna manera.
Dragonsoul
Investigué un poco más, veo la respuesta editada, ¡espero que la encuentres en tu proyecto!
KvD
1
Sí, eso funcionó de hecho. Estoy pensando, ¿se trata de un error VSCode o de los creadores de estos paquetes? Para mí fue en @ types / node y @ types / react-dom. Gracias :-)
dragonsoul
44
encontró el código defectuoso dentro de "typescript/3.2/node_modules/@types/node/index.d.ts" que está dentro de la ~/Library/Caches/carpeta. Estoy en una Mac Dado que está en mi espacio de trabajo de almacenamiento en caché, acabo de eliminar el código real: `` `lang-js declare module" console "{export = console; } `` ¡Y funcionó!
jcperez-ch
17

La solución más elegante que encontré es crear un console.d.tsarchivo ficticio en algún lugar de su proyecto:

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

Esto evitará la importación automática.

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

Krzysztof Kaczor
fuente
Esta es una solución elegante que se puede registrar y funcionará en múltiples espacios de trabajo y dispositivos. ¡Gracias!
phsource
44
¿Por qué obtengo "La expresión de una asignación de exportación debe ser un identificador o un nombre calificado en un ambiente context.ts (2714)"? ¿Podría estar relacionado con alguna configuración en mi tsconfig.json?
Mehmet N. Yarar
Sí, podría ... Puede verificar mi configuración aquí: github.com/codechecks/monorepo/blob/master/tsconfig.json Funciona con el archivo console.d.ts
Krzysztof Kaczor
17

Si agrega un fragmento para insertarlo console.logy lo usa en su lugar, no habrá importación automática de "consola"

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

Aquí está mi fragmento:

{
    "Print to console": {
        "prefix": "cl",
        "body": [
            "console.log('$1');",
        ],
        "description": "Log output to console"
    }
}
Giorgio
fuente
55
Aunque no es una solución, es inteligente y funciona cuando no puede eliminar el paquete que está causando el problema, como se indica en la respuesta más votada.
tibuurcio
Estoy de acuerdo con @tibuurcio. Ingeniosa solución, pero no puedo aceptar esto como una solución ...
DragonSoul
no funcionó todavía se importa automáticamente después de escribir la consola y luego presiono "." importa automáticamente
Mr.Ghamkhar
1
@ mr-ghamkhar si desea usar el fragmento anterior, solo necesita escribir "cl" o lo que sea que ponga en "prefijo". Debe ser algo más que "consola" para poder evitar el comportamiento de importación automática.
Giorgio
9

Si te gusto, olvido "cl", puedes usar múltiples prefijos en fragmentos :)

{
    "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
fuente
1
La verdadera respuesta es vago :)
FOLOF
Esta es la mejor solución para mí, porque no necesita editar paquetes internos
Harrison
5

Una forma de evitar que esto suceda es modificar su archivo tsconfig.json para limitar el conjunto de tipos que se importan automáticamente a su proyecto.

Tuve el mismo problema y lo solucioné agregando:

types: []

en mi archivo tsconfig.json. Lo que esto hace es deshabilitar TypeScript (y, por extensión, VSCode) de importar automáticamente todos los paquetes de nodos que se encuentren @types/en la configuración del proyecto. Esto no impide que TS importe esas definiciones de tipo si importa explícitamente un paquete usando esos tipos.

En mi caso específico, la consoledefinición provenía @types/node, que había sido importada al proyecto como una dependencia de Storybook. Sin embargo, mi proyecto era un proyecto de paquete web, destinado a ejecutarse en un navegador, por lo que importar tipos Node.js a mi código fuente no tenía sentido. El conjunto básico de tipos que desea utilizar en un navegador son tipos dom, no tipos de nodo.

Dependiendo de su proyecto, es posible que deba agregar explícitamente el conjunto de paquetes de tipo base al parámetro de tipos ( types: ["dom", "react"]y así sucesivamente). Sin embargo, en mi caso esto resultó ser innecesario, mi proyecto pudo compilarse perfectamente con una lista vacía. Y la tendencia de VSCode a importar automáticamente 'consola' parece haber desaparecido por completo; No he notado ningún otro efecto negativo hasta ahora.

Más información sobre la configuración de tipos en tsconfig.json aquí: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Talin
fuente