当前位置: 首页 > news >正文

vue项目使用typescript创建抽象类及其使用

如题,可以在vue项目使用typescript创建抽象类,然后使用这个抽象类。

通过TypeScript,可以在前端应用抽象类了。抽象类的好处,可以同时满足继承和多态,好处多多。以vue3为例:

1、创建抽象类

据说js类中,#开头的变量或方法,就是私有方法。(见拙作《vue项目中的类》)但是,现在TypeScript有private、protected、public等全套

export abstract class ListPage {#queryForm //查询框表单对象,例如:const queryForm = ref(),<el-form ref="queryForm">#myPageSetup //分页对象,例如:const myPageSetup = cloneDeep(pageSetup)constructor(queryForm, pageSetup) {this.#queryForm = queryFormthis.#myPageSetup = pageSetup}//列表数据请求。抽象方法,子类必须实现abstract doQuery(): void//查询onSearch = () => {this.#myPageSetup.pageIndex = 1this.doQuery()}//重置onReset = () => {this.#queryForm.value.resetFields()}//跳转至指定页码onPageChange = (pageIndex) => {this.#myPageSetup.pageIndex = pageIndexthis.doQuery()}//改变分页大小onPageSizeChange = (size) => {this.#myPageSetup.pageIndex = 1this.#myPageSetup.pageSize = sizethis.doQuery()}//排序onColumnSort = ({ prop, order }) => {this.#myPageSetup.order = orderthis.#myPageSetup.sort = propthis.doQuery()}
}

2、应用该抽象类

class MyListPage extends ListPage {constructor() {super(defaultQueryForm, myPageSetup) // 在派生类的构造函数中必须调用super()}doQuery = async () => {//巴拉巴拉巴拉}
}
const myListPage = new MyListPage()
myListPage.onSearch()

3、小结:

现在前端跟后端越来越像了。再也不是以前那种相对简单的三剑客了。本来吧,js广受欢迎,一个原因是它非常灵活,没有什么类型的限制,怎么写都可以。现在引入了TypeScript,到处声明类型,神憎鬼厌。有什么好处呢?难道声明了强类型后,没有类型转换,程序执行效率就提高了?未必吧,浏览器好像不直接支持typescript,最终还是要转换成原生js才能执行吧。这么说的话,所谓TypeScript也者,也不过是一种语法糖,让我们写代码时可以写这写那,假装在面向对象编程而已。有没有跟我一样,觉得这样反而不方便的?

相关文章:

  • 全链路压力测试有哪些主要作用
  • 虽然是个去年的旧新闻,但这透露了IBM的新去向
  • docker/华为云cce 部署nacos 2.3.0 集群模式
  • sqlilabs第四十九五十关
  • Laravel 使用rdkafka_laravel详细教程(实操避坑)
  • Google上架:2024年一月政策限制之 AI 生成的内容
  • 【动态规划】【 数学】C++算法:514自由之路
  • [SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类
  • 求幸存数之和 - 华为OD统一考试
  • 建模软件Rhinoceros mac介绍说明
  • Windows RPC运行时漏洞事后总结
  • 微软最新研究成果:使用GPT-4合成数据来训练AI模型,实现SOTA!
  • 如何在 Photoshop 中制作 3D 文本效果
  • 【Python】科研代码学习:一
  • python爬取彼岸图网图片,涉及知识点:requests,xpath,urllib,文件下载后保存,if__name__的用法
  • 深入了解以太坊
  • (三)从jvm层面了解线程的启动和停止
  • 【Linux系统编程】快速查找errno错误码信息
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ESLint简单操作
  • If…else
  • leetcode46 Permutation 排列组合
  • react-native 安卓真机环境搭建
  • Vue ES6 Jade Scss Webpack Gulp
  • 测试开发系类之接口自动化测试
  • 从0到1:PostCSS 插件开发最佳实践
  • 计算机在识别图像时“看到”了什么?
  • 力扣(LeetCode)21
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 用Canvas画一棵二叉树
  • 走向全栈之MongoDB的使用
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #git 撤消对文件的更改
  • #pragma data_seg 共享数据区(转)
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (4) PIVOT 和 UPIVOT 的使用
  • (rabbitmq的高级特性)消息可靠性
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (算法)N皇后问题
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)LINQ之路
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .htaccess配置常用技巧
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net framework4与其client profile版本的区别
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NetCore部署微服务(二)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .Net组件程序设计之线程、并发管理(一)