Vue3 + Typescript:类型使用记录 / 类型注解 / 积累

一、ReturnType<typeof createApp>

ReturnType<typeof createApp> 是一种类型安全的写法,是 TypeScript 中的一个高级类型,它用于获取函数 createApp 的返回类型。

实例:

import registerFocus from './focus' // 获取焦点
import registerDebounce from './debounce' // 防抖
import registerModifyText from './modifyText' // 修改文本
import { createApp } from 'vue'; // ReturnType<typeof createApp> 是一种类型安全的写法,是 TypeScript 中的一个高级类型,它用于获取函数 createApp 的返回类型。export default function registerDirectives(app: ReturnType<typeof createApp>) {registerFocus(app)registerDebounce(app)registerModifyText(app)
}

二、HTMLElement

HTMLElement 是 TypeScript 和 JavaScript 中用来表示 HTML 文档中任何元素的基本类型。它是 DOM(文档对象模型)API 的一部分,提供了对 HTML 元素的标准属性和方法的访问。

如果你知道元素的具体类型(例如 <div>),可以使用更具体的类型,如 HTMLDivElement,这样可以获得更精确的类型提示和检查。

实例:

// 获取焦点
import { createApp } from 'vue';
export default function (app: ReturnType<typeof createApp>) {app.directive('focus', {mounted(el: HTMLElement) {console.log('focus mounted')el.focus()}})
}

三、DirectiveBinding

在 Vue.js 中,DirectiveBinding 是一个用于描述指令绑定值的类型。它提供了对指令绑定值的类型检查和自动完成支持,特别是在 TypeScript 中。

DirectiveBinding 是一个接口,定义了指令绑定值的结构。它通常包含指令的参数、值、修饰符等信息。

当你在 Vue 中编写自定义指令时,DirectiveBinding 类型可以用来声明指令钩子函数的参数类型,以便 TypeScript 可以提供类型检查和智能提示。

实例:

    // 防抖
    import { createApp, DirectiveBinding  } from 'vue';
    export default function (app: ReturnType<typeof createApp>) {app.directive('debounce', {mounted(el: HTMLElement, binding: DirectiveBinding) {let timer: numberel.addEventListener('click', () => {if (timer) {clearTimeout(timer)}timer = setTimeout(() => {binding.value()}, 1000) as unknown as number})}})
    }
    

    四、RouteRecordRaw

    在 Vue Router 中,routes 的约束类型是 RouteRecordRaw。

    实例:

    import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
    import Home from '../views/Home.vue';
    const routes: Array<RouteRecordRaw> = [{path: '/',name: 'Home',component: Home,},{path: '/about',name: 'About',component: () => import(/* webpackChunkName: "about" */ '../views/About.vue'),},
    ];
    const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes,
    });
    export default router;

    自定义类型扩展:在实际项目开发中,可扩展 RouteRecordRaw 类型。

    实例:

    type RouteConfig = RouteRecordRaw & { hidden?: boolean };
    const routes: Array<RouteConfig> = [{path: '/',name: 'Home',component: Home,hidden: true,meta: { permission: true, icon: '' },},
    ];

    五、MouseEvent

    MouseEvent 是 TypeScript 内置的 DOM 类型之一,表示鼠标交互产生的事件。在 Vue 3 中,当你处理 @click、@mousemove 等鼠标相关事件时,可以使用这个类型来标注事件参数

    实例:

    <template><button @click="handleClick">点击我</button>
    </template><script setup lang="ts">
    const handleClick = (event: MouseEvent) => {console.log(event.clientX, event.clientY); // 鼠标点击位置console.log(event.target); // 触发事件的元素
    };
    </script>

    六、欢迎交流指正

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908013.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    SIFT 算法原理详解

    SIFT 算法原理详解 SIFT&#xff08;尺度不变特征变换&#xff0c;Scale-Invariant Feature Transform&#xff09;是一种经典的局部特征检测和描述算法&#xff0c;它能够在不同的尺度、旋转和光照变化下稳定地检测图像特征。SIFT 主要包括以下几个步骤&#xff1a;尺度空间极…

    2024年认证杯SPSSPRO杯数学建模D题(第二阶段)AI绘画带来的挑战解题全过程文档及程序

    2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现&#xff1a; 2023 年开年&#xff0c;ChatGPT 作为一款聊天型AI工具&#xff0c;成为了超越疫情的热门词条&#xff1b;而在AI的另一个分支——绘图领域&#xff0c;一款名为Midjourney&#xff08;MJ&#xff…

    电子电路:全面深入了解晶振的定义、作用及应用

    本次了解重点: 1.压电效应的数学描述 2.生产工艺以及关键工序 3.电路设计部分如负阻原理和匹配电容计算 4.失效案例比如冷启动问题 5.新形态晶振技术引入5G和量子计算 6.温补晶振的补偿机制 7故障案例讲解-更换负载电池或增加预热电路 蓝牙音频断续-频偏导致 工控机死机-起振电…

    【Java实用工具类】手撸SqlBuilder工具类,优雅拼接动态SQL,MyBatisPlus同款风格!

    &#x1f4cc; 正文&#xff1a; 有时候我们项目底层是 JdbcTemplate 查询&#xff0c;没法像 MyBatisPlus 一样用 Wrapper 拼接条件&#xff0c;但我们又不想手撸字符串。那怎么办&#xff1f;我今天就给你整了个 SqlBuilder 工具类&#xff0c;支持 eq、ne、like、in、gt、l…

    WEB3——开发者怎么查看自己的合约日志记录

    在区块链中查看合约的日志信息&#xff08;也叫事件 logs&#xff09;&#xff0c;主要有以下几种方式&#xff0c;具体方法依赖于你使用的区块链平台&#xff08;如 Ethereum、BSC、Polygon 等&#xff09;和工具&#xff08;如 Etherscan、web3.js、ethers.js、Hardhat 等&am…

    Maven-生命周期

    目录 1.项目对象模型 2.依赖管理模型 3.仓库&#xff1a;用于存储资源&#xff0c;管理各种jar包 4.本地仓库路径 1.项目对象模型 2.依赖管理模型 3.仓库&#xff1a;用于存储资源&#xff0c;管理各种jar包 4.本地仓库路径

    redis数据过期策略

    redis数据过期策略有两种方案 1.惰性删除 2.定期删除 首先说惰性删除&#xff0c;对于已经过期的数据&#xff0c;访问这个key的时候判断key是否过期&#xff0c;如果过期则删除&#xff0c;这种方式对cpu友好&#xff0c;只有使用key的时候才会进行过期检查&#xff0c;用不到…

    P1040 [NOIP 2003 提高组] 加分二叉树

    目录 题目算法标签: 区间 d p dp dp, 动态规划, d f s dfs dfs思路代码 题目 P1040 [NOIP 2003 提高组] 加分二叉树 算法标签: 区间 d p dp dp, 动态规划, d f s dfs dfs 思路 给出的是一颗子树的中序遍历, s c o r e l r r o o t score l \times r root scorelrro…

    uni-app学习笔记十七-css和scss的使用

    SCSS 和 CSS的异同点 我们可以使用css和scss来设置样式。其中SCSS&#xff08;Sassy CSS&#xff09;是 CSS 预处理器 Sass&#xff08;Syntactically Awesome Stylesheets&#xff09;的一种语法格式&#xff0c;而 CSS&#xff08;Cascading Style Sheets&#xff09;是标准…

    Spring Boot中Excel处理完全指南:从基础到高级实践

    Excel处理基础知识 1.1 为什么需要在应用中处理Excel文件&#xff1f; 在企业应用开发中&#xff0c;Excel文件处理是一个非常常见的需求&#xff0c;主要用于以下场景&#xff1a; 数据导入&#xff1a;允许用户通过Excel上传批量数据到系统 数据导出&#xff1a;将系统数据…

    Python编程基础(四) | if语句

    引言&#xff1a;很久没有写 Python 了&#xff0c;有一点生疏。这是学习《Python 编程&#xff1a;从入门到实践&#xff08;第3版&#xff09;》的课后练习记录&#xff0c;主要目的是快速回顾基础知识。 练习1&#xff1a;条件测试 编写一系列条件测试&#xff0c;将每个条…

    使用pandas实现合并具有共同列的两个EXCEL表

    表1&#xff1a; 表2&#xff1a; 表1和表2&#xff0c;有共同的列“名称”&#xff0c;而且&#xff0c;表1的内容&#xff08;行数&#xff09;<表2的行数。 目的&#xff0c;根据“名称”列的对应内容&#xff0c;将表2列中的“所处行业”填写到表1相应的位置。 实现代…

    ERP学习-AP

    业务需要。持续更新学习进度 借助网上零搭建平台上手实操 这个是简道云平台页面链接&#xff0c;登录的化去手机号登录 目前开始对应付模块进行学习

    Dify知识库下载小程序

    一、Dify配置 1.查看或创建知识库的API 二、下载程序配置 1. 安装依赖resquirements.txt ######requirements.txt##### flask2.3.3 psycopg2-binary2.9.9 requests2.31.0 python-dotenv1.0.0#####安装依赖 pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.…

    【PbstarAdmin】微前端架构下的高效后台管理系统解决方案

    如果你正在寻找一个高效、稳定、易于使用、易于扩展的管理后台解决方案&#xff0c;PbstarAdmin 绝对值得一试。以下是它的在线演示和官方文档地址&#xff0c;你可以先睹为快&#xff1a; 在线演示&#xff1a;http://pbstar-admin.pbstar.cn/官方文档&#xff1a;http://pbs…

    Java基础之数组(附带Comparator)

    文章目录 基础概念可变参数组数组与ListComparator类1,基本概念2,使用Comparator的静态方法&#xff08;Java 8&#xff09;3,常用Comparator方法4,例子 排序与查找数组复制其他 基础概念 int[] anArray new int[10];只有创建对象时才会使用new关键字&#xff0c;所以数组是个…

    Apache Doris 在数据仓库中的作用与应用实践

    在当今数字化时代&#xff0c;企业数据呈爆炸式增长&#xff0c;数据仓库作为企业数据管理和分析的核心基础设施&#xff0c;其重要性不言而喻。而 Apache Doris&#xff0c;作为一款基于 MPP&#xff08;Massively Parallel Processing&#xff0c;大规模并行处理&#xff09;…

    P1438 无聊的数列/P1253 扶苏的问题

    因为这两天在写线性代数的作业&#xff0c;没怎么写题…… P1438 无聊的数列 题目背景 无聊的 YYB 总喜欢搞出一些正常人无法搞出的东西。有一天&#xff0c;无聊的 YYB 想出了一道无聊的题&#xff1a;无聊的数列。。。 题目描述 维护一个数列 ai​&#xff0c;支持两种操…

    SpringBoot 自定义注解实现限流

    SpringBoot 自定义注解实现限流 限流是为了防止服务器资源的过度消耗&#xff0c;通过一定的策略来控制访问频率&#xff0c;确保服务的高可用性和稳定性。其核心意义在于防止流量高峰时期接口过载&#xff0c;从而引起服务崩溃或响应延迟增加。本文将简述如何通过AOP和自定义…

    Unity——QFramework框架 内置工具

    QFramework 除了提供了一套架构之外&#xff0c;QFramework 还提供了可以脱离架构使用的工具 TypeEventSystem、EasyEvent、BindableProperty、IOCContainer。 这些工具并不是有意提供&#xff0c;而是 QFramework 的架构在设计之初是通过这几个工具组合使用而成的。 内置工具…