Typescript如何从同一个文件分别导入类型和变量?
完全可以实现类型(接口)和变量(枚举)的分开导入,你遇到的问题大概率是TypeScript版本或者项目配置问题,按以下方案操作即可解决:
方案1:拆分两条导入语句(匹配你原本的写法习惯)
import type 是TypeScript 3.8版本才引入的语法,只要你的项目TypeScript版本大于等于3.8,你写的拆分导入语法本身是合法的,只需要检查以下两点即可正常使用:
- 升级项目的TypeScript依赖到3.8以上版本
- 确认
tsconfig.json中没有配置禁止类型导入的特殊规则
最终可运行的写法如下:
// 仅导入纯类型,编译后会被完全抹除 import type { LoginForm, UserState } from '../../types'; // 导入枚举(枚举会编译为实际存在的运行时JS对象,不能用import type导入) import { LoginStatus } from '../../types';
方案2:同一条导入语句内联声明类型导入(更简洁,推荐)
如果你的TypeScript版本大于等于4.5,可以使用内联类型导入语法,既满足你明确区分类型和运行时值的需求,又不需要拆成两条独立的导入语句:
import { LoginStatus, // 显式标记为类型导入,编译后会被抹除 type LoginForm, type UserState } from '../../types';
额外说明
你在/types/index.ts里的重新导出写法完全符合规范:纯类型用export type导出,枚举这类运行时值用普通export导出,不需要调整这部分代码。如果调整写法后仍报错,可以检查tsconfig.json的module和moduleResolution配置,建议设置为ESNext和Bundler(TS 5.0+),避免模块解析规则导致的导入错误。
内容的提问来源于stack exchange,提问作者Tom Vu
相关产品推荐
相关产品推荐

