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

时间:2019-12-10 11:15:53

标签: node.js typescript eslint

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

Missing file extension "ts" for "./lib/env" import/extensions

这是我的.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
  }
}

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

6 个答案:

答案 0 :(得分:11)

在您的 eslint 配置中将此添加到 rules

"rules": {
  "import/extensions": "off"
}

这会禁用规则,因为 airbnb 的配置启用了它。

答案 1 :(得分:10)

我知道这已经晚了,但如果您要扩展 Airbnb 规则,您可以使用 eslint-config-airbnb-typescript

先卸载旧的,添加新的:

# 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

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

extends: ["airbnb-typescript"]

答案 2 :(得分:9)

将以下代码添加到“规则”:

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

'airbnb'伴奏config导致了问题。

答案 3 :(得分:0)

如果您像我一样尝试配置 babel、旧版 Javascript 和新的打字稿文件并尝试在 *.ts 上启用无扩展导入,那么我遇到了 this ESLint issue(我也在下面找到解决方案):

除了 rules 配置:

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

您还需要在您的 .eslintrc.js 中添加一个额外的设置条目:

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

祝你好运!

答案 4 :(得分:0)

通过捆绑我在互联网上找到的所有答案来解决这个问题:

这是我的最终结果:

{
  "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"
      }
    ]
  }
}

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

答案 5 :(得分:0)

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

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

} 并添加到规则:

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



enter code here