Vue 3 + TypeScript 中为 provide/inject 添加强类型需定义接口、用 Symbol 作键并封装组合式函数。先用 interface 描述数据结构,提供方用 ref<T> 或 reactive<T> 包装,注入方用 inject<T>(key, default) 或非空断言,并推荐 Symbol 键与组合式函数封装以保障类型安全与可维护性。
Vue 3 + TypeScript 中为 provide 和 inject 添加强类型,核心是让类型信息在提供和注入两端保持一致,避免 undefined 或类型丢失。关键不在“能不能”,而在于“怎么写才安全、可维护”。
先明确你要共享的数据形状,用 TypeScript interface 或 type 描述:
例如主题配置:
Theme 接口,包含 mode(枚举)、primaryColor 等字段ref<Theme> 或 reactive<Theme> 包装数据,再传给 provide
inject<Theme>('theme')
因为 inject() 默认返回 T | undefined,不处理会触发类型错误:
inject<Theme>('theme', defaultTheme)
inject<Theme>('theme')!,但仅限可信上下文theme.value.mode 前确保 theme 不为 undefined
字符串 key 易拼错、难追踪;Symbol 可绑定类型,且天然唯一:
const themeKey = Symbol() as InjectionKey<Theme>
provide(themeKey, themeRef)
inject(themeKey) —— 类型自动推导,无需重复写泛型把 provide/inject 逻辑收拢,隐藏细节,暴露语义化 API:
useThemeProvider(),内部调用 provide 并返回更新方法useTheme(),内部调用 inject 并做默认值兜底,返回响应式对象virtualbox下怎么实现ubuntu20.04开机自动挂载共享文件夹?
ubuntu20.04怎么开启护眼模式? ubuntu夜间模式的设置方法
如何在Ubuntu 20.04上安装Microsoft Edge浏览器
Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总
优麒麟20.04.1发布 更新内容汇总(附下载)
Mermaid Visual Editor 如何同步可视化操作与 Mermaid 源码?