TypeScript能否将文件中所有类型导入为联合类型?
将多个导出类型合并为联合类型的方法
你当前的写法报错是因为 import * as Types 导入的是一个命名空间对象,而非类型集合,TypeScript 不允许直接把命名空间当作类型使用。
下面提供两种可行的解决方案:
方案一:在类型文件中提前定义联合类型
直接在 types.ts 里把所有类型合并成一个联合类型导出,后续文件直接导入这个联合类型即可:
// types.ts export type Type1 = string; export type Type2 = number; export type Type3 = boolean; // 预定义所有类型的联合类型 export type AllTypes = Type1 | Type2 | Type3;
// other.ts import { AllTypes } from "./types"; const t: AllTypes = 1; // 正常运行
方案二:在导入文件中动态生成联合类型
如果不想修改原类型文件,可以在导入时通过 TypeScript 的类型操作符动态生成联合类型:
// types.ts 保持原内容不变 export type Type1 = string; export type Type2 = number; export type Type3 = boolean;
// other.ts import * as Types from "./types"; // 提取所有导出类型的联合类型 type AllTypes = Types[keyof typeof Types]; const t: AllTypes = 1; // 正常运行
原理说明:
typeof Types获取命名空间Types的类型结构keyof typeof Types得到所有导出类型的名称联合:"Type1" | "Type2" | "Type3"Types[keyof typeof Types]遍历所有类型名称,取出对应的类型并合并为联合类型
两种方案的选择:
- 若多个文件都需要用到这个联合类型,优先选方案一,便于统一维护
- 若只是单个文件临时需要合并,方案二更灵活
内容的提问来源于stack exchange,提问作者jayatubi
相关产品推荐
相关产品推荐

