本文介绍: 要说今年最热门的前端技术,Vue3 和 TS 绝对榜上有名了。今天就给大家分享一下如何在 Vue3 组件结合 Composition-Api 使用 TS 类型。如果有不会或者不熟的小伙伴,一起学起来吧!

前言

要说今年最热门的前端技术,Vue3 和 TS 绝对榜上有名了。今天就给大家分享一下如何在 Vue3 组件中结合 Composition-Api 使用 TS 类型。如果有不会或者不熟的小伙伴,一起学起来吧!

一、为 props 标注类型

使用 < script setup >

使用 < script setup > 时,defineProps()函数支持从它的参数中推导类型
在这里插入图片描述
这被称为 运行声明 ,因为传递给 defineProps() 的参数会作为运行时的 props 选项使用
第二种方式通过泛型参数来定义 props类型,这种方式更加直接:
在这里插入图片描述
这被称为 基于类型声明编译器会尽可能地尝试根据类型参数推导出等价的运行时选项。 这种方式的不足之处在于,失去了定义 props 默认值的能力。为了解决这个问题我们可以使用 withDefaults 编译器宏:
在这里插入图片描述
上面代码会被编译为等价的运行propsdefault 选项。

非 < script setup &gt;

如果没有使用 < script setup &gt;,那么为了开启 props 的类型推导,必须使用 defineComponent()。传入 setup()props 对象类型是从 props 选项中推导而来。
在这里插入图片描述

二、为 emits 标注类型

使用 < script setup &gt;

< script setup &gt; 中,emit 函数的类型标注可以使用 运行时声明 或者 基于类型的声明 :
在这里插入图片描述
我们可以看到基于类型的声明 可以使我们对所触发事件的类型进行更细粒度的控制

非 < script setup &gt;

没有使用 < script setup >defineComponent()可以根据 emits 选项推导暴露setup 上下文中的 emit 函数的类型:
在这里插入图片描述

三、为 ref() 标注类型

默认推导类型

ref 会根据初始化时的值自动推导其类型:
在这里插入图片描述

通过接口指定类型

有时我们可能想为 ref 内的值指定一个复杂的类型,可以使用 Ref 这个接口
在这里插入图片描述

通过泛型指定类型

或者,在调用 ref() 时传入一个泛型参数,来覆盖默认的推导行为
在这里插入图片描述
注意:如果你指定了一个泛型参数但没有给出初始值,那么最后得到的就将是一个包undefined 的联合类型。

四、为 reactive() 标注类型

默认推导类型

reactive() 也会隐式地从它的参数中推导类型:
在这里插入图片描述

通过接口指定类型

要显式地指定一个 reactive 变量的类型,我们可以使用接口
在这里插入图片描述

五、为 computed() 标注类型

默认推导类型

computed() 会自动从其计算函数返回值上推导出类型:
在这里插入图片描述

通过泛型指定类型

你还可以通过泛型参数显式指定类型:
在这里插入图片描述

六、为事件处理函数标注类型

处理原生 DOM 事件时,应该给事件处理函数的参数正确地标注类型:
在这里插入图片描述
没有类型标注时,这个 event 参数会隐式地标注为 any 类型。这也会在 tsconfig.json配置"strict": true 或 "noImplicitAny": true 时报出一个 TS 错误。因此,建议显式地为事件处理函数的参数标注类型。此外,你可能需要显式地强制转换 event 上的属性
在这里插入图片描述

七、为 provide / inject 标注类型

provideinject 通常会在不同的组件运行。要正确地为注入的值标记类型,Vue 提供了一个 InjectionKey 接口,它是一个继承自 Symbol泛型类型,可以用来在提供者和消费者之间同步注入值的类型:
在这里插入图片描述
建议将注入 key 的类型放在一个单独的文件中,这样它就可以被多个组件导入
当使用字符串注入 key 时,注入值的类型是 unknown需要通过泛型参数显式声明:
在这里插入图片描述
注意注入的值仍然可以是 undefined,因为无法保证提供者一定会在运行provide 这个值。当提供了一个默认值后,这个 undefined 类型就可以被移除
在这里插入图片描述
如果你确定该值将始终被提供,则还可以强制转换该值:
在这里插入图片描述

八、为 dom 模板引用标注类型

模板 ref 需要通过一个显式指定的泛型参数和一个初始值 null创建
在这里插入图片描述
注意为了严格的类型安全,有必要在访问 el.value 时使用可选链或类型守卫。这是因为直到组件挂载前,这个 ref 的值都是初始的 null,并且 vif 将引用元素卸载时也会被设置为 null。

九、为组件模板引用标注类型

有时,我们需要为一个子组件添加一模板 ref以便调用它公开的方法比如,我们有一个 MyComponent 子组件,它有一个打开模态框的方法
在这里插入图片描述

为了获取 MyComponent 的类型,我们首先需要通过 typeof 得到其类型,再使用 TypeScript 内置InstanceType 工具类型来获取实例类型:
在这里插入图片描述

小结

好了,以上就是在 Vue3 组件中使用 TS 类型的基本方法,也是我最近的 Vue3 学习笔记。欢迎在评论区交流讨论,一起学习成长!

原文地址:https://blog.csdn.net/qq_44880095/article/details/128590274

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_14047.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注