You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js+TypeScript自定义导入别名导入自定义类型报错原因咨询

问题原因分析

你遇到的问题是TypeScript内置的类型解析规则和自定义导入别名的冲突导致的,具体原因如下:

核心冲突点

TypeScript有一套默认的全局类型声明文件查找逻辑:

  • 它会自动将名为types的目录,或者以@types开头的模块路径,优先识别为全局类型声明的存放目录(比如我们常用的node_modules/@types就是第三方库的类型声明目录)。
  • 你的tsconfig.json里配置了paths: {"@*": ["./src/*"]},但当你使用import { TUser } from "@types/User"时,TypeScript会忽略这个自定义的路径映射,反而把@types/User当成是要加载全局类型声明中的User模块。但你的User.ts是放在src/types下的业务自定义类型模块,并非全局类型声明文件,因此触发了编译错误:
Cannot import type declaration files. Consider importing 'User' instead of '@types/User'.

两种解决方法有效的原因

  1. 改用import { TUser } from "@/types/User"
    这个写法沿用了原有的@/*别名逻辑,明确指向src/types/User,不会触发TypeScript对@types的特殊解析规则,因此能被正确识别为业务模块。

  2. 重命名types文件夹为typesd
    避开了TypeScript默认识别的types目录名,此时@typesd/User会正常走你自定义的@*映射规则,被解析为src/typesd/User,自然不会再触发全局类型声明的解析逻辑。

内容的提问来源于stack exchange,提问作者Bibek Oli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:42:31