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

如何在单个TypeScript文件中导出包含接口的默认对象?

如何在单个文件中导出包含类型接口的默认对象(Vite + TypeScript)

你之前的代码报错,核心原因是**import type导入的类型在编译阶段会被TypeScript完全擦除**,不会出现在最终生成的JS文件里。所以你把AProps、BProps放到默认导出的对象中时,运行时JS找不到这些变量,自然会报错。

要在单个文件里实现“默认导出包含组件和对应类型接口”的需求,你需要把运行时存在的组件和仅在TS层面生效的类型分开处理,同时通过类型断言让TS识别默认导出的对象包含类型:

import A from './A';
import type { AProps } from './A';
import B from './B';
import type { BProps } from './B';

// 定义导出对象的完整类型(包含组件和接口类型)
type ComponentExports = {
  A: typeof A;
  AProps: AProps;
  B: typeof B;
  BProps: BProps;
};

// 仅导出运行时存在的组件,同时通过类型断言让TS识别完整类型
export default { A, B } as ComponentExports;

这样写的好处:

  • 运行时:默认导出的对象只有A、B两个实际存在的组件,不会出现变量未定义的错误
  • TypeScript层面:你可以通过默认导入的对象直接访问AProps、BProps类型,比如:
    import X from './your-file';
    
    // 使用组件
    const App = () => <X.A />;
    // 使用类型
    type MyAProps = X.AProps;
    

如果你更习惯先做命名导出再聚合为默认导出,也可以在单个文件里这么写:

// 先做命名导出(包含组件和类型)
export { default as A } from './A';
export type { AProps } from './A';
export { default as B } from './B';
export type { BProps } from './B';

// 聚合命名导出为默认导出
const allExports = {
  A,
  B,
} as typeof import('./this-file-name'); // 替换成当前文件的文件名

export default allExports;

这种写法先通过命名导出收集所有内容,再聚合为默认导出,TS同样能识别到allExports包含AProps、BProps类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:05:55