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

时间:2019-03-16 15:35:59

标签: typescript eslint

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

import app from './app';

哪个会导致此Typescript错误

2:17  error  Unable to resolve path to module './app'  import/no-unresolved

./ app.ts 确实存在,但我尚未将.ts文件编译为.js文件。一旦将.ts文件编译为.js,错误就会消失。

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

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

"parser": "@typescript-eslint/parser",
"parserOptions": {
    "project": "./tsconfig.json"
}

如何配置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;

12 个答案:

答案 0 :(得分:11)

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

{
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },
  ...
}

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

希望有帮助。

答案 1 :(得分:10)

在将“ eslint”:“ 6.8.0” “打字稿”:“ 3.8.3” 一起使用时,除了在.eslintrc中添加以下内容:< / p>

"settings": {
  "import/resolver": {
    "node": {
      "paths": ["src"],
      "extensions": [".js", ".jsx", ".ts", ".tsx"],
    }
  },
}

您还需要将此行添加到tsconfig.json下的compilerOptions

"compilerOptions": {
  ...
  // Base directory to resolve non-relative module names.
  "baseUrl": "src",
  ...
}

答案 2 :(得分:7)

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

首先,您需要安装此软件包:

yarn add -D eslint-import-resolver-typescript

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

{
  "settings": {
    "import/resolver": {
      "typescript": {}
    },
  },
}

答案 3 :(得分:4)

ts eslint 都在咆哮我,所以我必须将以下内容添加到我的 .eslintrc 文件中:

{ 
    ...
    "rules": {
        ....
        "import/extensions": "off"
    },
    "settings": {
        ....
        "import/resolver": {
            "node": {
                "extensions": [".js", ".jsx", ".ts", ".tsx"]
            }
        }
    }
}

答案 4 :(得分:3)

我必须添加要扩展的打字稿导入,然后在规则中关闭导入:

"extends": {
    "plugin:import/typescript"
},
"rules": {
    "import/extensions": "off"
}

答案 5 :(得分:2)

这对我有用:

.eslintrc.js

{
    ...
    settings: {
        ...
        'import/resolver': {
            node: {
                extensions: ['.js', '.jsx', '.ts', '.tsx'],
                moduleDirectory: ['node_modules', 'src/'],
            },
        },
    }
}

答案 6 :(得分:2)

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

"import/resolver": {
    "typescript": {},
    "node": {
        "extensions": [".js", ".ts"],
        "paths": ["node_modules/", "node_modules/@types"]
    }
},

我还使用"typescript": {}定义,该定义基本上是用于使用tsconfig.json中的配置,并且我安装了eslint-import-resolver-typescript才能正常工作。

答案 7 :(得分:1)

以防万一,如果有人也需要支持子目录。例如,它支持

  1. src / components / input =>组件/输入
  2. src / api / external / request =>外部/请求

    "settings": {
      "import/resolver": {
        "node": {
          "paths": ["src", "src/api"],
          "extensions": [".js", ".jsx", ".ts", ".tsx"]
        }
      }
    }
    

这是 eslint ^ 6.1.0

的有效示例

答案 8 :(得分:0)

对于使用babel-module的用户,只需添加extensions,这样就可以了:

      "babel-module": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"],
        "alias": {
          "app": "./app"
        }
      }

答案 9 :(得分:0)

我遇到了同样的问题,只能使用

进行修复
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",

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

所述

答案 10 :(得分:0)

首先在扩展名下方添加"plugin:import/typescript",如下所示:

"extends": [
    "airbnb-base",
    "plugin:import/typescript"
 ],

然后在规则下方

"rules": {
        "import/extensions": [
            "error",
            "ignorePackages",
            {
                "ts": "never"
            }
        ]
    }

答案 11 :(得分:-1)

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

我在这个问题上停留了两个小时,而所有的时间只要简单重启就可以使编辑器找到该模块。

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