l***@outlook.com
l***@outlook.com
  • 发布:2025-04-11 13:15
  • 更新:2025-04-14 15:38
  • 阅读:229

【报Bug】定义Props 的时候 extends 了另一个组件暴露的 interface 时出错 Failed to resolve extends base type

分类:uni-app

产品分类: uniapp/H5

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 22H2

浏览器平台: Chrome

浏览器版本: 所有

项目创建方式: CLI

CLI版本号: 3.0.0-4050720250324001

示例代码:

组件 A.vue

// 从组件 A.vue 暴露出一个 interface  
export interface AProps {  
  name: string;  
}

组件 B.vue

// 从组件 A.vue 引入这个 interface 并在 extends 后将这个 interface 作为组件的 props  
import { AProps } from "./A.vue";  
interface BProps extends AProps {  
  age: number;  
}  
const props = defineProps<BProps>();

就这样引发了报错,在将 @dcloudio 的依赖版本回退到 3.0.0-3080720230703001 的时候可以成功运行,可升级到 3.0.0-4050720250324001 (最新版)后无法运行,其他依赖、代码、均无变化。
经测试这个bug是从 3.0.0-4000620240325001 版本开始出现的。 3.0.0-3090920231225001 版本仍支持此语法

操作步骤:

拉取代码

git clone https://gitee.com/ljb2458/jun-uni.git

安装依赖

pnpm i

启动到任意平台(此时是正常的)

pnpm run dev:mp-weix

更新到最新 @dcloudio 版本

pnpm run dev:mp-weixin

重新启动

pnpm run dev:mp-weixin

结果是报错,即使将除了 @dcloudio 的依赖全部回退也依然报错。

预期结果:

成功编译并运行。

实际结果:

报错,无法运行。

bug描述:

3.0.0-3080720230703001 版本升级到 3.0.0-4050720250324001(最新版) 后编译时报错。

 [@vue/compiler-sfc] Failed to resolve extends base type. If this previously worked in 3.2, you can instruct the compiler to ignore this extend by adding /* @vue-ignore */ before it, for example:  interface Props extends /* @vue-ignore */ Base {}  Note: both in 3.2 or with the ignore, the properties in the base type are treated as fallthrough attrs at runtime.  

经测试这个bug是从 3.0.0-4000620240325001 版本开始出现的。 3.0.0-3090920231225001 版本仍支持此语法

这是因为我在定义Props 的时候 extends 了另一个组件暴露的 interface 而引发的报错,可这种写法在 @dcloudio 3.0.0-3080720230703001 是被支持的。

2025-04-11 13:15 负责人:无 分享
已邀请:
DCloud_UNI_FengXY

DCloud_UNI_FengXY

该写法在vue3.3+编译器里会告警,告警信息里很清楚,可以自己添加 / @vue-ignore / 来忽略

如:interface BProps extends / @vue-ignore / AProps

  • l***@outlook.com (作者)

    不是这样的,在 git clone https://gitee.com/ljb2458/jun-uni.git 中使用了该写法,并没有报错,在仅升级 @dcloudio 依赖至 3.0.0-4000620240325001 之后的版本开始的报错,因此 3.0.0-4000620240325001 之后的版本可能有什么改动使这种原本受支持的版本失效了。

    2025-04-14 15:27

  • DCloud_UNI_FengXY

    回复 l***@outlook.com: dcloudio内部依赖vue,会不定时升级vue版本,这个警告就是升级了vue编译器报的,

    信息里边已经告诉了是[@vue/compiler-sfc] 这个插件告警的。


    https://github.com/vuejs/core/blob/main/packages/compiler-sfc/src/script/resolveType.ts#L436

    2025-04-17 13:14

要回复问题请先登录注册