我的文件 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;
答案 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)
以防万一,如果有人也需要支持子目录。例如,它支持
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)
如果您已按照其他答案中的建议更新了.eslintrc
和tsconfig.json
文件,但仍然有问题...重新启动vscode。
我在这个问题上停留了两个小时,而所有的时间只要简单重启就可以使编辑器找到该模块。
希望这可以节省其他人的时间!