Typescript eslint - 缺少文件扩展名“ts”导入/扩展

Nol*_*lat 105 node.js typescript eslint

我有一个用 Typescript 制作的简单 Node/Express 应用程序。和 eslint 给我错误

Missing file extension "ts" for "./lib/env" import/extensions
Run Code Online (Sandbox Code Playgroud)

这是我的 .eslintrc 文件

    {
  "extends": [
    "airbnb",
    "plugin:@typescript-eslint/recommended",
    "prettier",
    "prettier/react",
    "plugin:import/errors",
    "plugin:import/warnings",
    "plugin:import/typescript"
  ],
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint", "prettier", "import"],
  "settings": {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"],
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    },
    "import/resolver": {
      "typescript": {
        "directory": "./tsconfig.json"
      },
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },
  "rules": {
    "@typescript-eslint/indent": [2, 2],
    "no-console": "off",
    "import/no-unresolved": [2, { "commonjs": true, "amd": true }],
    "import/named": 2,
    "import/namespace": 2,
    "import/default": 2,
    "import/export": 2
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经安装了 eslint-plugin-import 和 eslint-import-resolver-typescript。我不知道为什么,我得到了那个错误。

sup*_*yco 219

将以下代码添加到rules

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

airbnbESLint配置导致问题。

  • 成功了!谢谢。(其他读者:请确保将其放在“规则”而不是“设置”下......) (21认同)
  • 但这有什么作用呢? (7认同)
  • 这只是完全禁用“导入/扩展”。无意义的回答。 (7认同)
  • @JulianSoto 对于在打字稿项目中使用“eslint-config-airbnb-base”的人来说,有一条规则“确保在导入路径中一致使用文件扩展名”,这会导致问题。所以我们可以覆盖它以适应打字稿项目。 (2认同)
  • 将“错误”替换为 2。 (2认同)

Rya*_*ale 27

我知道这已经晚了,但是如果您要扩展 Airbnb 规则,则可以使用eslint-config-airbnb-typescript。您应该能够按照 github 上项目 README 中的说明进行操作。



停止:在 2021 年 8 月之前,您还需要执行以下任务。这些说明保留在此处仅供历史参考。您应该不再需要这样做了。

首先卸载旧的并添加新的:

# uninstall whichever one you're using
npm uninstall eslint-config-airbnb
npm uninstall eslint-config-airbnb-base

# install the typescript one
npm install -D eslint-config-airbnb-typescript
Run Code Online (Sandbox Code Playgroud)

然后更新你的 ESlint 配置,从“扩展”部分删除旧的 Airbnb 并添加新的:

extends: ["airbnb-typescript"]
Run Code Online (Sandbox Code Playgroud)

  • 多谢兄弟。这是解决此问题的最佳解决方案,因为正如已接受的答案所述,问题来自于常规的爱彼迎配置没有打字稿支持。这个包只是添加了这种支持。 (2认同)
  • 这应该是公认的答案。感谢您花时间更新您的原始答案 (2认同)

小智 26

这是一个奇怪的解决方案,但我已经添加"": "never"并且它对我有用(https://github.com/import-js/eslint-plugin-import/issues/1573)。

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

  • 奇怪的是,这是唯一对我有用的解决方案。有谁知道为什么需要空引号? (3认同)

小智 12

将导入扩展和解析器添加到.eslintrc很重要

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

进一步添加规则:

 "import/extensions": [
  "error",
  "ignorePackages",
  {
    "js": "never",
    "jsx": "never",
    "ts": "never",
    "tsx": "never"
  }
]



enter code here
Run Code Online (Sandbox Code Playgroud)


nis*_*shi 5

通过捆绑我在互联网上找到的所有答案来完成这项工作:

这就是我的最终结果:

{
  "settings": {
    "import/extensions": [".js", ".jsx", ".ts", ".tsx"],
    "import/parsers": {
      "@typescript-eslint/parser": [".ts", ".tsx"]
    },
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  },

  "env": {
    "browser": true,
    "es2021": true
  },

  "extends": ["plugin:react/recommended", "airbnb"],
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 12,
    "sourceType": "module"
  },
  "plugins": ["import", "react", "@typescript-eslint"],
  "rules": {
    "no-console": 1,
    "import/extensions": [
      "error",
      "ignorePackages",
      {
        "js": "never",
        "jsx": "never",
        "ts": "never",
        "tsx": "never",
        "mjs": "never"
      }
    ]
  }
}

Run Code Online (Sandbox Code Playgroud)

顺便说一句,我正在使用 React Native。如果你使用不同的东西,只需删除与反应相关的东西就足够了