Tengo esta importación en mi archivo app.spec.ts :
import app from './app';Lo que causa este error de mecanografiado
2:17 error Unable to resolve path to module './app' import/no-unresolved./app.ts existe, pero no he compilado el archivo .ts en un archivo .js. Tan pronto como compilo el archivo .ts en un .js, el error desaparece.
Sin embargo, dado que se supone que eslint funciona con mecanografiado, debería resolver los módulos con .ts y no con .js.
También agregué la información mecanografiada en mi archivo de configuración de eslint :
"parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json" }¿Cómo puedo configurar eslint de tal manera que intente resolver módulos con .ts y no con .js?
¡Salud!
EDITAR #1
Contenido de app.ts :
import bodyParser from 'body-parser'; import express from 'express'; import graphqlHTTP from 'express-graphql'; import { buildSchema } from 'graphql'; const app = express(); const schema = buildSchema(` type Query { hello: String } `); const root = { hello: () => 'Hello world!' }; app.use(bodyParser()); app.use('/graphql', graphqlHTTP({ schema, rootValue: root, graphiql: true, })); export default app;Puede configurar la resolución de importación del módulo ESLint agregando este fragmento a su archivo de configuración .eslintrc.json :
{ "settings": { "import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } }, ... }Más información sobre resolutores: https://github.com/benmosher/eslint-plugin-import#resolvers .
para aquellos que usan babel-module simplemente agregue las extensions para que sea algo como esto:
"babel-module": { "extensions": [".js", ".jsx", ".ts", ".tsx"], "alias": { "app": "./app" } }Tuve el mismo problema y solo pude solucionarlo agregando el complemento TypeScript a .eslintrc , usando la opción extends en .eslintrc
extends: [ "plugin:import/errors", "plugin:import/warnings", "plugin:import/typescript", ],Esto lo hace por mí:
.eslintrc.js
{ ... settings: { ... 'import/resolver': { node: { extensions: ['.js', '.jsx', '.ts', '.tsx'], moduleDirectory: ['node_modules', 'src/'], }, }, } }Tanto ts como eslint me estaban ladrando, así que tuve que agregar lo siguiente a mi archivo .eslintrc :
{ ... "rules": { .... "import/extensions": "off" }, "settings": { .... "import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } } }En caso de que alguien también necesite admitir el directorio secundario. Por ejemplo, es compatible
src/api/externo/solicitud => externo/solicitud
"settings": { "import/resolver": { "node": { "paths": ["src", "src/api"], "extensions": [".js", ".jsx", ".ts", ".tsx"] } } }Este es un ejemplo funcional para eslint ^6.1.0
Al usar "eslint": "6.8.0" con "typescript": "3.8.3" además de agregar lo siguiente a .eslintrc :
"settings": { "import/resolver": { "node": { "paths": ["src"], "extensions": [".js", ".jsx", ".ts", ".tsx"], } }, } También debe agregar esta línea a tsconfig.json en compilerOptions :
"compilerOptions": { ... // Base directory to resolve non-relative module names. "baseUrl": "src", ... }Tuve que agregar la importación mecanografiada a las extensiones y luego desactivar las importaciones en las reglas:
"extends": { "plugin:import/typescript" }, "rules": { "import/extensions": "off" }Mi situación con ts monorepo era que no estaba recibiendo errores de lint en IDE, todos los alias se resolvieron correctamente, pero tan pronto como ejecuté eslint en uno de los proyectos, estaba obteniendo
error Unable to resolve path to module Es importante mostrar la ruta eslint a cada uno de los archivos tsconfig de su paquete.
En resumen y para los que tienen TS, alias y monorepo:
eslint-import-resolver-typescripteslintrc.js (esto ayudará a ide y eslint a calcular alias y demás): 'import/resolver': { node: { paths: 'packages/*/src', extensions: ['.js', '.jsx', '.ts', '.tsx'], }, typescript: { alwaysTryTypes: true, project:[ path.resolve(__dirname, '.tsconfig.json'), // root tsconfig path.resolve(__dirname, './packages/projA/tsconfig.json'), path.resolve(__dirname, './packages/projB/tsconfig.json'), /* ...rest of projects path to its tsconfig */ ], },eslintrc.js se extiende: { ..., 'plugin:import/recommended', 'plugin:import/typescript', }eslintrc.js : plugins: ['@typescript-eslint', ..., 'import'],eslintrc.js parserOptions (igual que a la configuración) esto ayudará a eslint: project: [ path.resolve(__dirname, '.tsconfig.json'), // root tsconfig path.resolve(__dirname, './packages/projA/tsconfig.json'), path.resolve(__dirname, './packages/projB/tsconfig.json'), /* ...rest of projects path to its tsconfig */ ],Para mí, simplemente fue instalar eslint-import-resolver-node :
yarn add -D eslint-import-resolver-node # or npm install eslint-import-resolver-node --save-devAl importar archivos de configuración regional para Angular (por ejemplo import localeFr from '@angular/common/locales/fr'; ), tuve que permitir la extensión .mjs .
Aquí hay un extracto de mi .eslintrc.json :
... "extends": [ ... "plugin:import/recommended", "plugin:import/typescript", ... ], "settings": { "import/resolver": { "node": { "extensions": [".ts", ".mjs"] } } }, "rules": { ... } ...Si ha actualizado sus archivos .eslintrc y tsconfig.json como se sugiere en las otras respuestas, y aún tiene el problema, reinicie vscode .
Primero agregue "plugin:import/typescript" en extensiones como a continuación:
"extends": [ "airbnb-base", "plugin:import/typescript" ],luego abajo bajo las reglas
"rules": { "import/extensions": [ "error", "ignorePackages", { "ts": "never" } ] }En mi caso, ESLint no pudo resolver los tipos instalados desde DefinitelyTyped ( @type/ packages), por lo que tuve que especificar dónde encontrarlos en .eslintrc de esta manera:
"import/resolver": { "typescript": {}, "node": { "extensions": [".js", ".ts"], "paths": ["node_modules/", "node_modules/@types"] } }, También agregué "typescript": {} , que es básicamente para usar configuraciones de tsconfig.json y tengo eslint-import-resolver-typescript para que funcione.
Esta fue la única solución que funcionó para mí.
Primero, necesitas instalar este paquete:
yarn add -D eslint-import-resolver-typescript Luego agregue esto a su archivo .eslintrc para que pueda cargar la configuración de alias de su tsconfig.json en ESLint:
{ "settings": { "import/resolver": { "typescript": {} }, }, }