next.js 使用自定义导入别名禁用自定义类型

njthzxwz  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(144)

最近,我开始将我的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";


为什么会这样?

ki1q1bka

ki1q1bka1#

很有可能,你正在直接或间接地使用DefinitelyTyped提供的类型定义。由于他们在npm上发布了org "types"下的类型,因此路径@types/User是不明确的。看起来你正在尝试从@types组织导入一个名为User的包。
这就是重命名文件夹的原因--因为它不再模糊你是否打算从你的文件夹或组织下的包导入,也是为什么@/types/User工作的原因。

相关问题