components.d.ts声明组件类型的作用

全局注册组件的代码,index.ts

c 复制代码
import LayoutBasicPage from './layout/basic-page'const components = [
 
  LayoutBasicPage,

]const install = (app: App) => {
  for (const component of components) {
    // 注意全局组件必须要有name属性
    app.component(component.name, component)
  }
}

这时跟index.ts新建一个同个级别的components.d.ts

c 复制代码
import '@vue/runtime-core'

declare module '@vue/runtime-core' {
  // GlobalComponents for Volar
  export interface GlobalComponents {
    LayoutBasicPage: typeof import('./layout/basic-page')['default']
  }
}

因为 这两段代码作用完全不同,且互不替代的

文件 运行时用? 给谁用? 目的
index.ts 会打包进最终 JS Vue 运行时 真正注册全局组件,让浏览器能渲染
components.d.ts 编译阶段就被删除 TypeScript / Volar 告诉 TS「模板里写 时是合法组件,并提供类型提示」

总结:运行时注册 ≠ 编译时类型

你在 index.ts 里用 app.component(component.name, component) 把组件注册到 Vue 运行时------浏览器里可以正常渲染。

例如:

c 复制代码
<LayoutBasicPage title="xxx" />

TypeScript 在编译阶段并不知道你运行过这段代码,因此当你在模板里写时,它会报错:

❗ Cannot find name 'LayoutBasicPage'.

也无法提示 title 是什么类型。

相关推荐
追风筝的人er10 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
前端·vue.js·后端
编程老船长13 小时前
解决不同项目需要不同 Node.js 版本的问题
前端·vue.js
xiaogg367815 小时前
spring oauth2 单点登录
java·vue.js·spring
前端那点事15 小时前
Vue前端SEO优化全攻略(实操落地版,新手也能上手)
前端·vue.js
计算机学姐16 小时前
基于微信小程序的校园失物招领管理系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·信息可视化·微信小程序·uni-app
fix一个write十个17 小时前
从零搭建音视频通话太痛苦?这个 Vue3 CallKit 让你 5 分钟搞定 1v1 + 群聊通话
前端·vue.js·github
小歪 | 前端18 小时前
VUE_运行Vue项目Network: unavailable问题解决
前端·javascript·vue.js
计算机学姐19 小时前
基于微信小程序的宠物服务系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·微信小程序·uni-app·宠物
钱端工程师19 小时前
vue自定义一个在线查看文件的组件(.xlsx、.docx、.pdf、图片等)
javascript·vue.js·pdf
涵涵(互关)19 小时前
GoView各项目文件中的相关语法3
前端·vue.js·typescript