ts踩坑!vue3中ts文件用export导出公共方法的ts类型定义

当我们有一个ts文件,定义并export出该function,其中方法里边有定义的变量,方法、钩子函数等多种,并最终return出该变量、方法。
此时 ts规则校验会让我们返回该函数类型。如下

export default function () {const chart = ref();const sidebarElm = ref<Element>();const chartResizeHandler = (): void => {if (chart.value) {chart.value.resize();}};const sidebarResizeHandler = (e: TransitionEvent): void => {if (e.propertyName === 'width') {chartResizeHandler();}};const initResizeEvent = (): void => {window.addEventListener('resize', chartResizeHandler, { passive: true });};const destroyResizeEvent = (): void => {window.removeEventListener('resize', chartResizeHandler);};const initSidebarResizeEvent = (): void => {sidebarElm.value = document.getElementsByClassName('sidebar-container')[0];if (sidebarElm.value) {sidebarElm.value.addEventListener('transitionend',sidebarResizeHandler as EventListener,{ passive: true });}};const destroySidebarResizeEvent = (): void => {if (sidebarElm.value) {sidebarElm.value.removeEventListener('transitionend',sidebarResizeHandler as EventListener);}};const mounted = (): void => {initResizeEvent();initSidebarResizeEvent();};const beforeDestroy = (): void => {destroyResizeEvent();destroySidebarResizeEvent();};const activated = (): void => {initResizeEvent();initSidebarResizeEvent();};const deactivated = (): void => {destroyResizeEvent();destroySidebarResizeEvent();};return {chart,mounted,beforeDestroy,activated,deactivated};
} 

在这里插入图片描述

那么如何定义该方法的ts类型呢?

在TypeScript中,你可以通过接口(Interface)或类型别名(Type Alias)来定义函数的类型。对于给出的函数,我会创建一个类型别名来定义返回的对象结构,并且为函数本身定义一个更具体的类型。

import { Ref } from 'vue';// 定义chart和sidebarElm的引用类型
type ChartRef = Ref<any> | undefined; // 这里假设chart是一个具有resize方法的对象,但具体类型取决于你的库
type SidebarElmRef = Ref<Element | null>;// 定义事件处理函数的类型
type ChartResizeHandler = () => void;
type SidebarResizeHandler = (e: TransitionEvent) => void;// 定义init和destroy函数类型
type InitResizeEventHandler = () => void;
type DestroyResizeEventHandler = () => void;
type InitSidebarResizeEventHandler = () => void;
type DestroySidebarResizeEventHandler = () => void;// 定义生命周期钩子类型
type LifecycleHook = () => void;// 定义返回对象的类型
interface ResizeHandlerReturn {chart: ChartRef;mounted: LifecycleHook;beforeDestroy: LifecycleHook;activated: LifecycleHook;deactivated: LifecycleHook;
}// 定义你的函数类型
type ResizeHandlerFunction = () => ResizeHandlerReturn;// 实现你的函数并为其添加类型注解
export default function useResizeHandler(): ResizeHandlerReturn {const chart: ChartRef = ref();const sidebarElm: SidebarElmRef = ref<Element | null>(null);// ... 省略之前的实现细节 ...// 返回带有类型注解的对象return {chart,mounted,beforeDestroy,activated,deactivated};
}

注意几点:

1.我使用了Ref类型来自Vue,
2.我为chart定义了一个类型ChartRef,假设它是一个具有resize方法的对象,但你可能需要根据你的实际情况来具体定义它。
3.我为sidebarElm定义了一个类型SidebarElmRef,它是Ref<Element | null>,因为ref的初始值可能是null。
4.我为所有的事件处理函数和生命周期钩子定义了类型别名,以便在函数内部使用它们。
5.我定义了一个ResizeHandlerReturn接口来描述我的函数应该返回的对象结构。
6.最后,我定义了一个ResizeHandlerFunction类型别名来描述你的函数本身。
7.在实现函数时,我添加了类型注解来帮助理解,确保你的函数和返回的对象符合你定义的类型。

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

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

相关文章

Java基础-序列化、泛型、1.8新特性、其他

目录 序列化 什么是序列化&#xff1f;什么是反序列化&#xff1f; Serializable 接口有什么用&#xff1f; serialVersionUID 又有什么用&#xff1f; Java 序列化不包含静态变量吗&#xff1f; 如果有些变量不想序列化&#xff0c;怎么办&#xff1f; 说说有几种序列化…

Yolo-World网络模型结构及原理分析(一)——YOLO检测器

文章目录 概要一、整体架构分析二、详细结构分析YOLO检测器1. Backbone2. Head3.各模块的过程和作用Conv卷积模块C2F模块BottleNeck模块SPPF模块Upsampling模块Concat模块 概要 尽管YOLO&#xff08;You Only Look Once&#xff09;系列的对象检测器在效率和实用性方面表现出色…

计网:物理层

写在开头&#xff1a;物理层就负责传送比特0和1&#xff0c; 本质上理解物理层就是理解传输介质哪个表示比特0和1&#xff0c;如&#xff1a;高电平表示1、低电平表示0等 物理层主要任务&#xff1a; 机械特性&#xff1a;指明接口所用接线器的形状和尺寸、引脚数目和排列、固…

【BUG】已解决:requests.exceptions.ProxyError: HTTPSConnectionPool

已解决&#xff1a;requests.exceptions.ProxyError: HTTPSConnectionPool 目录 已解决&#xff1a;requests.exceptions.ProxyError: HTTPSConnectionPool 【常见模块错误】 原因分析 解决方案 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&am…

Android Studio 输出信息出现乱码

现象 解决办法 一、第一步 二、第二步 添加如下代码&#xff1a; 直接复制进去即可 -Dfile.encodingUTF-8 注意 &#xff1a;最后&#xff0c;添加后重新编译工程&#xff0c;如果还是发现乱码&#xff0c;则需要关闭Android Studio重新启即可

Spring Security之安全异常处理

前言 在我们的安全框架中&#xff0c;不管是什么框架&#xff08;包括通过过滤器自定义&#xff09;都需要处理涉及安全相关的异常&#xff0c;例如&#xff1a;登录失败要跳转到登录页&#xff0c;访问权限不足要返回页面亦或是json。接下来&#xff0c;我们就看看Spring Sec…

Docker核心技术:容器技术要解决哪些问题

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;容器技术要解决哪些问题&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题&#xff08;本文&#xff09;Docker的基本使用Docker是如何实…

【AI大模型】生成式AI的未来——CHAT还是AGENT?

【AI大模型】CHAt还是AGENt&#xff1f; 最近&#xff0c;许多人工智能公司或者部门都在针对Agent——人工智能体有所动作。 例如&#xff1a; 文心一言智能体 Gnomic智能体 英伟达视觉AI代理 那么人工智能概念中的智能体Agent到底是什么呢&#xff1f;它又为何会突然在人工智…

虚拟化环境中如何实现以业务为中心的网络隔离?Everoute 推出虚拟专有云网络(VPC)功能

目前&#xff0c;不少企业都利用云计算和虚拟化技术提升 IT 系统灵活性、敏捷性和成本效益。然而&#xff0c;云环境的“多租户”特性也为业务安全带来了新的挑战&#xff0c;如何保障不同业务主体或租户之间的数据安全和网络隔离&#xff0c;成为企业关注的焦点。 作为 Smart…

可控硅触发板选型指南

可控硅触发板(SCR Trigger Board)是一种用于触发和控制可控硅(SCR)导通的电子设备。在电力控制、电机驱动、变频调速等领域中&#xff0c;可控硅触发板发挥着至关重要的作用。它通过精确的触发信号&#xff0c;实现对可控硅的启动和控制&#xff0c;从而实现对电路的开关和电流…

【ROS2】高级:安全-理解安全密钥库

目标&#xff1a;探索位于 ROS 2 安全密钥库中的文件。 教程级别&#xff1a;高级 时间&#xff1a;15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验&#xff01; 背景 在继续之前&#xff0c;请确保您已完成设置安全教程。 sros2 包可以用来创…

昇思25天学习打卡营第25天 | RNN实现情感分类

学习心得&#xff1a;RNN实现情感分类 在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;情感分类是一个极具挑战性的任务&#xff0c;它要求模型能够准确地从文本中识别出情感倾向。通过使用MindSpore框架和RNN模型进行情感分类&#xff0c;我获得了许多有关构…

如何理解String的不可变性

一、缓存角度 在Java中对于字符串的处理&#xff0c;是利用字符串池去存储Java中的字符串&#xff0c;在字符串池中&#xff0c;俩个内容相同的字符串变量&#xff0c;可以从池中指向同一个对象&#xff0c;这样就节省了空间资源。 public class Main {public static void ma…

web服务器测试

[rootlocalhost ~]# vim /etc/nginx/conf.d/test_ test_ip.conf test_name.conf test_virtualdir.conf [rootlocalhost ~]# vim /etc/nginx/conf.d/test_name.conf [rootlocalhost ~]# tree /www/

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(五)-无人机跟踪

目录 引言 5.3 无人机跟踪 5.3.1 无人机跟踪模型 5.3.2 无人机位置报告流程 5.3.3 无人机存在监测流程 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everyth…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号3

基础认证题库请移步&#xff1a;HarmonyOS应用开发者基础认证题库 注&#xff1a;有读者反馈&#xff0c;题库的代码块比较多&#xff0c;打开文章时会卡死。所以笔者将题库拆分&#xff0c;单选题20个为一组&#xff0c;多选题10个为一组&#xff0c;题库目录如下&#xff0c;…

MySQL0.MSI方式安装

本机运行环境&#xff1a;Windows10 1.下载 进入MySQL官方下载页面&#xff1a;https://downloads.mysql.com/archives/installer/ 红色箭头&#xff1a;点击选择下载的版本 黄色箭头&#xff1a;点击下载MSI安装包 此次下载选择MySQL8.0.37的MSI安装包 2.安装 下载完毕后…

AJAX复习总结

AJAX复习总结 AJAX即“Asynchronous JavaScript and XML”&#xff08;异步的JavaScript与XML技术&#xff09;,是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。简单来说&#xff0c;AJAX就是让网页变得更快、更灵活的一种方法 举个例子&#xff1a…

水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集)

水表数字识别3&#xff1a;Pytorch CRNN实现水表数字识别(含训练代码和数据集) 目录 水表数字识别3&#xff1a;Pytorch CRNN实现水表数字识别(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 5. 水表数字识别模型训…

Qt中 .pro、.pri、.prf、.prl文件简解

一、pro文件 .pro就是工程文件&#xff08;project&#xff09;&#xff0c;是Qt项目的主配置文件&#xff0c;用于描述整个项目的基本信息和编译配置。在Qt中用qmake生成makefile文件&#xff0c;它是由.pro文件生成而来的&#xff0c;.pro文件的具体格式语法如下&#xff1a…