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

相关推荐
Hexene...2 分钟前
【前端Vue】npm install时根据新的状态重新引入实际用到的包,不引入未使用到的
前端·vue.js·npm
2301_780669868 分钟前
Vue(入门配置、常用指令)、Ajax、Axios
前端·vue.js·ajax·javaweb
我是ed.32 分钟前
Vue3 音频标注插件 wavesurfer
前端·vue.js·音视频
Hexene...1 小时前
【前端Vue】出现elementui的index.css引入报错如何解决?
前端·javascript·vue.js·elementui
红色的小鳄鱼1 小时前
Vue 监视属性 (watch) 超全解析:Vue2 Vue3
前端·javascript·css·vue.js·前端框架·html5
web小白成长日记1 小时前
Vue-实例从 createApp 到真实 DOM 的挂载全历程
前端·javascript·vue.js
GISer_Jing1 小时前
原生HTML项目重构:Vue/React双框架实战
vue.js·人工智能·arcgis·重构·html
李慕婉学姐1 小时前
【开题答辩过程】以《基于SpringBoot Vue的校园后勤管理系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
vue.js·spring boot·后端
红色的小鳄鱼1 小时前
Vue 教程 自定义指令 + 生命周期全解析
开发语言·前端·javascript·vue.js·前端框架·html
有诺千金1 小时前
VUE3入门很简单(5)---组件通信(自定义事件)
javascript·vue.js·ecmascript