将eslint与typescript一起使用-无法解析模块的路径

max*_*pre 24 typescript eslint

我的文件app.spec.ts中有此导入:

import app from './app';
Run Code Online (Sandbox Code Playgroud)

导致此Typescript错误的原因

2:17  error  Unable to resolve path to module './app'  import/no-unresolved
Run Code Online (Sandbox Code Playgroud)

./app.ts确实存在,但是我还没有将.ts文件编译成.js文件。一旦将.ts文件编译为.js,错误就会消失。

但是,由于eslint应该使用typescript,因此应该使用.ts而不是.js解析模块。

我还在eslint配置文件中添加了打字稿信息:

"parser": "@typescript-eslint/parser",
"parserOptions": {
    "project": "./tsconfig.json"
}
Run Code Online (Sandbox Code Playgroud)

如何配置eslint,使其尝试使用.ts而不是.js解析模块?

干杯!

编辑#1

内容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;
Run Code Online (Sandbox Code Playgroud)

Eas*_*all 88

您可以通过将以下代码段添加到.eslintrc.json配置文件中来设置ESLint模块导入分辨率:

{
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

有关解析器的更多信息:https : //github.com/benmosher/eslint-plugin-import#resolvers

希望能帮助到你。

  • 我相信[其他答案](/sf/answers/3968753491/)是正确的解决方案。 (23认同)
  • 啊,“导入/扩展”:0,“帮助:/sf/ask/3924522661/ 56192351#评论115802229_56192351 (4认同)
  • 在我的 eslintrc.js 配置文件中,“import/resolver”对象需要位于“rules”节点中,而不是如上所述的“settings”节点中。 (4认同)
  • 这似乎解决了“无法解析模块路径”错误,但现在我仍然收到一堆“[...]缺少文件扩展名“tsx”” (3认同)

ole*_*ank 70

这对我有用:

.eslintrc.js

{
    ...
    settings: {
        ...
        'import/resolver': {
            node: {
                extensions: ['.js', '.jsx', '.ts', '.tsx'],
                moduleDirectory: ['node_modules', 'src/'],
            },
        },
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用;即使包括“plugin:import/*”扩展也没有做任何事情。指向“src/”的“moduleDirectory”行是让这个工作在我这边工作的关键。 (4认同)
  • 这对我也有用。请注意,必须添加“moduleDirectory”键。 (2认同)
  • 添加 moduleDirectory: ['node_modules', 'src/'] 后即可工作 (2认同)

Ped*_*o A 40

就我而言,我只需要改变

import { SetOptional, SetRequired } from 'type-fest';
Run Code Online (Sandbox Code Playgroud)

import type { SetOptional, SetRequired } from 'type-fest';
Run Code Online (Sandbox Code Playgroud)


Dio*_*ela 31

这是唯一对我有用的解决方案。

首先,你需要安装这个包:

yarn add -D eslint-import-resolver-typescript
Run Code Online (Sandbox Code Playgroud)

然后将其添加到您的.eslintrc文件中,以便它可以将别名设置从您的文件加载tsconfig.json到 ESLint:

{
  "settings": {
    "import/resolver": {
      "typescript": {}
    },
  },
}
Run Code Online (Sandbox Code Playgroud)

  • 当使用 monorepo 和不同包的路径别名时,这是唯一对我有用的方法。 (11认同)
  • ` "typescript": {} ` 帮我解决了这个问题。 (3认同)
  • 感谢这个解决方案,其他解决方案对我的用例没有真正帮助 (2认同)

rem*_*acr 15

使用"eslint": "6.8.0""typescript": " 3.8.3" 时,除了将以下内容添加到.eslintrc

"settings": {
  "import/resolver": {
    "node": {
      "paths": ["src"],
      "extensions": [".js", ".jsx", ".ts", ".tsx"],
    }
  },
}
Run Code Online (Sandbox Code Playgroud)

您还需要将此行添加到tsconfig.jsonunder compilerOptions

"compilerOptions": {
  ...
  // Base directory to resolve non-relative module names.
  "baseUrl": "src",
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我必须将 .d.ts 添加到列表中 - 包 csstypes 仅包含一个 index.d.ts: "settings": { "import/resolver": { "node": { "paths": [ " src" ], "扩展名": [ ".js", ".jsx", ".d.ts", ".ts", ".tsx" ] } } } (2认同)

Raf*_*zon 9

我有同样的问题,我只能使用解决此问题

"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",
Run Code Online (Sandbox Code Playgroud)

在.eslintrc.js中的“扩展”下,如此处所述eslint-plugin-import

  • 谢谢!添加 `"plugin:import/typescript"` 为我解决了这个问题。 (17认同)
  • ^ 修复:/sf/answers/4148821001/ (7认同)
  • 请注意,您需要 1. 将“plugin:import/typescript”放在“airbnb-base”之后。2. 请记住在`plugins`部分添加`"import"`。 (6认同)
  • 现在我得到“<文件>缺少文件扩展名“ts”” (5认同)

Jak*_*nga 8

如果您已按照其他答案中的建议更新了您的.eslintrctsconfig.json文件,但问题仍然存在……请重新启动 vscode。

我在这个问题上被困了两个小时,一直以来只要简单的重启就可以让编辑器找到该模块。

希望这可以节省别人的时间!


小智 7

首先添加"plugin:import/typescript"如下扩展:

"extends": [
    "airbnb-base",
    "plugin:import/typescript"
 ],
Run Code Online (Sandbox Code Playgroud)

然后根据规则如下

"rules": {
        "import/extensions": [
            "error",
            "ignorePackages",
            {
                "ts": "never"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)


Typ*_*hon 7

当导入localeAngular 文件时(例如import localeEn from '@angular/common/locales/en';),我必须允许.mjs扩展名。

这是我的摘录.eslintrc.json

  ...
  "extends": [
    ...
    "plugin:import/recommended",
    "plugin:import/typescript",
    ...
  ],
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [".ts", ".mjs"]
      }
    }
  },
  "rules": {
    ...
  }
  ...
Run Code Online (Sandbox Code Playgroud)

编辑:

当导入HttpClient或 时HttpClientModule,错误又回来了。我发现将扩展添加.d.ts到列表中解决了这个问题,这也比.mjs(不再需要)更有意义。

这是我的新内容.eslintrc.json

  ...

  {
    "files": ["*.ts"],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
      "project": ["tsconfig.json"],
      "createDefaultProgram": true
    },
    "settings": {
      "import/resolver": {
        "node": {
          "extensions": [".ts", ".d.ts"]
        }
      }
    },
    "extends": [
      "eslint:recommended",
      "plugin:import/recommended",
      "plugin:import/typescript",
      "plugin:@typescript-eslint/recommended",
      "plugin:@angular-eslint/recommended",
      "plugin:@angular-eslint/ng-cli-compat",
      "plugin:@angular-eslint/ng-cli-compat--formatting-add-on",
      "plugin:@angular-eslint/template/process-inline-templates"
    ],
    "rules": {
      ...
    }
  }

  ...
Run Code Online (Sandbox Code Playgroud)

(我正在使用@angular-eslint,但你可能有不同的extends列表)


Joh*_*alt 6

无论TSeslint是我狂吠,所以我不得不将以下内容添加到我的.eslintrc文件:

{ 
    ...
    "rules": {
        ....
        "import/extensions": "off"
    },
    "settings": {
        ....
        "import/resolver": {
            "node": {
                "extensions": [".js", ".jsx", ".ts", ".tsx"]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


vam*_*mcs 6

就我而言,ESLint 无法解析从DefinitelyTyped@type/包)安装的类型,因此我必须指定在哪里找到它们,.eslintrc如下所示:

"import/resolver": {
    "typescript": {},
    "node": {
        "extensions": [".js", ".ts"],
        "paths": ["node_modules/", "node_modules/@types"]
    }
},
Run Code Online (Sandbox Code Playgroud)

我还添加了"typescript": {},这基本上是为了使用配置tsconfig.json,并且我已经eslint-import-resolver-typescript安装了它才能工作。


Mr.*_*har 5

对于那些使用babel-module只添加extensions所以它会是这样的:

      "babel-module": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"],
        "alias": {
          "app": "./app"
        }
      }
Run Code Online (Sandbox Code Playgroud)