最近,我开始将我的Next.js项目升级到TypeScript,并将我的导入别名从@/*
修改为@*
。这是我的新tsconfig.json
。
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"removeComments": true,
"noUnusedLocals": true,
"allowUnreachableCode": false,
"noUnusedParameters": true,
"noImplicitReturns": true,
"paths": {
"@*": ["./src/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
字符串
我将自定义类型存储在**/types
**文件夹中,如User.ts
export type TUser = {
_id: string;
name: string;
...
};
型
我可以在我的应用程序上导入任何内容,例如:
import Header from "@components/Header"
or
import { ConnectToDatabase } from "@modules/mongodb";
型
但是当我尝试以这种方式导入自定义类型User
时。
import { TUser } from "@types/User";
型
我得到这个编译错误。
Cannot import type declaration files. Consider importing 'User' instead of '@types/User'.
型
但是如果我像下面这样导入,错误就会消失。
import { TUser } from "@/types/User";
型
如果我将文件夹**types
**重命名为其他文件夹,我可以正常导入。
import { TUser } from "@typesd/User";
型
为什么会这样?
1条答案
按热度按时间ki1q1bka1#
很有可能,你正在直接或间接地使用DefinitelyTyped提供的类型定义。由于他们在npm上发布了org "types"下的类型,因此路径
@types/User
是不明确的。看起来你正在尝试从@types组织导入一个名为User
的包。这就是重命名文件夹的原因--因为它不再模糊你是否打算从你的文件夹或组织下的包导入,也是为什么
@/types/User
工作的原因。