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 是什么类型。

相关推荐
计算机毕设VX:Fegn089539 分钟前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
北辰alk1 小时前
深入理解Vue数据流:单向与双向的哲学博弈
vue.js
北辰alk1 小时前
解决Vue打包后静态资源图片失效的终极指南
vue.js
Jing_Rainbow4 小时前
【Vue-2/Lesson62(2025-12-10)】模块化与 Node.js HTTP 服务器开发详解🧩
前端·vue.js·node.js
冴羽4 小时前
2026 年 Web 前端开发的 8 个趋势!
前端·javascript·vue.js
五仁火烧5 小时前
Vue3 项目的默认端口行为
服务器·vue.js·nginx·容器·vue
Younglina6 小时前
一个纯前端的网站集合管理工具
前端·vue.js·chrome
pas1367 小时前
31-mini-vue 更新element的children
前端·javascript·vue.js
计算机程序设计小李同学8 小时前
婚纱摄影集成管理系统小程序
java·vue.js·spring boot·后端·微信小程序·小程序
xkxnq8 小时前
第二阶段:Vue 组件化开发(第 17天)
javascript·vue.js·ecmascript