1***@qq.com
1***@qq.com
  • 发布:2026-05-14 16:11
  • 更新:2026-05-14 17:18
  • 阅读:38

【报Bug】props extends ExtractPropTypes<typeof ...> 报错

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 11 专业版 10.0.22631 版本 22631

浏览器平台: Chrome

浏览器版本: 147.0.7727.138

项目创建方式: CLI

CLI版本号: 5000520260324001

操作步骤:

运行

预期结果:

不报错,并且正常生成props

实际结果:

报错

bug描述:

声明组件类型 使用 interface extend ExtractPropTypes<typeof ...> 报错
[plugin:vite:vue] [@vue/compiler-sfc] Failed to resolve extends base type.

2026-05-14 16:11 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

您好,感谢您对 uni-app 的关注和反馈。

根据您提交的 bug 描述,我从官方评审的角度提出以下意见:

1. 反馈内容的完整性评估

  • BUG 描述:仅提供了报错信息 [plugin:vite:vue] [@vue/compiler-sfc] Failed to resolve extends base type.,但没有说明具体是在什么代码场景下出现的,也没有提供可复现的代码片段。缺少对组件定义、ExtractPropTypes 使用方式以及相关类型导入的描述。
  • 代码示例:缺失。这是最关键的缺失项,官方人员无法直接定位问题,也无法判断是代码语法错误、类型导入问题还是编译器缺陷。
  • 复现步骤:仅写了“运行”,过于简略。需要说明是新建项目还是已有项目,具体是哪个平台(App、H5、小程序等),以及操作过程。
  • 预期结果/实际结果:描述合理,但需要配合代码才能验证。
  • 分类信息:提供了操作系统和 HBuilderX 版本(正式版),但未提供具体的 HBuilderX 版本号(如 4.xx.xxxx),也未说明项目是 uni-app 还是 uni-app x,以及目标运行平台。这些信息对定位问题至关重要。

2. 基于知识库的分析

  • 在现有知识库中,没有直接记录 ExtractPropTypes 相关的已知 bug。已有的 props 相关问题主要集中在 uni-app x 的 uts 环境中(如 withDefaults、可选 Props、自定义类型默认值等),与您报告的场景(Vue 的 ExtractPropTypes 工具类型)并不直接对应。
  • 您的错误信息来自 @vue/compiler-sfc,提示无法解析 extends 的基础类型。这通常意味着在 <script> 块中进行的类型声明或导入存在错误,可能的原因包括:
    • 没有正确导入 ExtractPropTypes(应从 vue 导入)
    • typeof 引用的 props 定义对象未在编译期被正确识别
    • 类型文件缺失或路径错误
    • 在不支持该工具类型的特殊环境中使用(如 uts 插件)
  • 由于缺少代码,无法判断您使用的是标准 Vue3 组件语法还是在 uni-app x 中使用了 uts 语言。如果是后者,其 props 定义方式有专用语法(如 defineProps<{...}>PropType),ExtractPropTypes 可能不受完全支持。

3. 结论与建议

  • 当前反馈信息不完整,无法直接确认为有效 bug
  • 建议您补充以下内容后,重新提交问题或直接在该反馈下补充:
    1. 完整的组件代码(包括 <script> 部分和相关的类型定义文件)
    2. 准确的 HBuilderX 版本号(在菜单栏“帮助-关于”中查看)
    3. 项目类型(uni-app 还是 uni-app x)
    4. 运行的目标平台
    5. 如果可能,提供一个最简复现工程或代码片段
  • 如果您的项目是 uni-app x,请参考官方文档中关于 组件 Props 的定义方式,避免使用可能不被支持的 Vue 高级类型工具。

我们会持续关注该问题,待您补充信息后,将进一步协助排查。感谢您的支持!

内容为 AI 生成,仅供参考
DCloud_HB_WJ

DCloud_HB_WJ

把 defineProps 的“纯类型继承”改成了“运行时 props 对象”。

原来:

interface CompDemo2Props extends ExtractPropTypes<typeof compDemoProps>
defineProps<CompDemo2Props>()
改成:

定义 compDemo2Props = { ...compDemoProps, test2: ... }
用 defineProps(compDemo2Props)
类型再从 ExtractPropTypes<typeof compDemo2Props> 推出来
核心原因:

vue/compiler-sfc 对 extends ExtractPropTypes<...> 这种写法解析不稳定
改成运行时 props 对象后,编译最稳,也更符合 Vue 的实际运行方式

要回复问题请先登录注册