我在我的文件app.spec.ts中有这个导入:

import app from './app';

是什么导致了这个Typescript错误

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

/应用程序。ts确实存在,但我没有将.ts文件编译成.js文件。一旦我把.ts文件编译成.js文件,错误就消失了。

然而,由于eslint应该与typescript一起工作,它应该用.ts而不是.js来解析模块。

我还在eslint配置文件中添加了typescript信息:

"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;

当前回答

优秀的人知道如何在2022年通过在线程序解决这个问题:

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

其他回答

这是唯一对我有效的解决办法。

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

yarn add -D eslint-import-resolver-typescript

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

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

当使用"eslint": "6.8.0"和"typescript": "3.8.3"时,除了在.eslintrc中添加以下内容:

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

您还需要将这一行添加到tsconfig。编译选项下的json:

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

我也有同样的问题,我只能通过添加typescript插件到.eslintrc,使用.eslintrc中的extends选项来修复它

  extends: [
    "plugin:import/errors",
    "plugin:import/warnings",
    "plugin:import/typescript",
  ],

我与ts monorepo的情况是,我在IDE中没有得到lint错误,所有的别名都得到了解决,但只要我在其中一个项目上运行eslint,我就会得到

error  Unable to resolve path to module

显示每个包的tsconfig文件的eslint路径是很重要的。

综上所述,对于TS,别名和monorepo患者:

安装eslint-import-resolver-typescript 添加到eslintrc.js设置(这将帮助ide和eslint确定别名和其他东西):

    '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扩展:

{
 ...,
   'plugin:import/recommended',
   'plugin:import/typescript',
}

添加到eslintrc.js插件:

  plugins: ['@typescript-eslint', ..., 'import'],

添加到eslintrc.js的parserOptions(和settings一样),这将帮助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 */
        ],

我必须将typescript导入添加到extends中,然后在规则中关闭导入:

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