运行
- 发布:2026-05-14 16:11
- 更新:2026-05-14 17:18
- 阅读:38
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: Windows 11 专业版 10.0.22631 版本 22631
浏览器平台: Chrome
浏览器版本: 147.0.7727.138
项目创建方式: CLI
CLI版本号: 5000520260324001
操作步骤:
预期结果:
不报错,并且正常生成props
不报错,并且正常生成props
实际结果:
报错
报错
bug描述:
声明组件类型 使用 interface extend ExtractPropTypes<typeof ...> 报错
[plugin:vite:vue] [@vue/compiler-sfc] Failed to resolve extends base type.
欢迎到专业群( 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。
- 建议您补充以下内容后,重新提交问题或直接在该反馈下补充:
- 完整的组件代码(包括
<script>部分和相关的类型定义文件) - 准确的 HBuilderX 版本号(在菜单栏“帮助-关于”中查看)
- 项目类型(uni-app 还是 uni-app x)
- 运行的目标平台
- 如果可能,提供一个最简复现工程或代码片段
- 完整的组件代码(包括
- 如果您的项目是 uni-app x,请参考官方文档中关于 组件 Props 的定义方式,避免使用可能不被支持的 Vue 高级类型工具。
我们会持续关注该问题,待您补充信息后,将进一步协助排查。感谢您的支持!
把 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 的实际运行方式