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

如何在Vue3单文件组件中实现多导出,同时导出默认组件和枚举?

问题原因

Vue 单文件组件(SFC)的默认编译逻辑仅会对外暴露export default定义的组件实例,顶层的其他命名导出默认不会被编译到最终的导出对象中,因此父组件直接命名导入拿到的PagesListType会是undefined。

解决方案

方案1:将枚举挂载为组件静态属性(适配当前Options API写法)

修改子组件的导出逻辑,把枚举挂到默认导出的组件对象上:

<script lang="ts">
export enum PagesListType {
  RecentlyCreated = 'Recently Created',
  RecentlyModified = 'Recently Modified',
  Starred = 'Starred'
};

export default {
  // 新增这行,把枚举作为组件的静态属性导出
  PagesListType,
  props: {
    listType: PagesListType
  },
  data() {
    return {
      pages: [],
      PagesListType
    };
  },
};
</script>

父组件导入后从组件实例上取枚举即可:

import PagesList from './PagesList.vue';

export default {
  components: { PagesList },
  data() {
    return {
      // 从组件实例获取枚举
      PagesListType: PagesList.PagesListType
    }
  }
};

方案2:多script块分离类型导出(适配所有工具链版本)

在SFC中新增一个独立的script块专门用于导出公共类型,和业务逻辑分离:

<!-- 专门用于对外导出枚举 -->
<script lang="ts">
export enum PagesListType {
  RecentlyCreated = 'Recently Created',
  RecentlyModified = 'Recently Modified',
  Starred = 'Starred'
};
</script>

<!-- 业务逻辑script块 -->
<script lang="ts">
export default {
  props: {
    listType: {
      type: String as () => PagesListType,
      required: true
    }
  },
  data() {
    return {
      pages: [],
      PagesListType
    };
  },
};
</script>

这种写法下父组件可以直接正常命名导入:

import PagesList, { PagesListType } from './PagesList.vue';

方案3:升级工具链后使用

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:27:03