Typescript的class语法[类]的操作和应用
TypeScript 是一种面向对象的编程语言,它扩展了 JavaScript,为其添加了类型系统和其他一些特性。TypeScript 的 class 语法可以让开发者更加方便地使用面向对象的编程方式。本文将详细介绍 TypeScript 的 class 语法的操作和应用,并提供代码案例分析。
1. class 的基本语法
在 TypeScript 中,class 关键字可以用来定义一个类。下面是一个简单的 class 定义示例:
class Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}, and I'm ${this.age} years old.`);}
}
在上面的示例中,我们定义了一个名为 Person 的类,它有两个属性 name 和 age,以及一个构造函数和一个方法 sayHello。构造函数用来初始化 name 和 age 属性,而 sayHello 方法用来输出一个问候语。
2. 继承和多态
在 TypeScript 中,我们可以使用 extends 关键字来实现类的继承。下面是一个继承示例:
class Student extends Person {grade: number;constructor(name: string, age: number, grade: number) {super(name, age);this.grade = grade;}sayHello() {console.log(`Hello, my name is ${this.name}, and I'm a student in grade ${this.grade}.`);}
}
在上面的示例中,我们定义了一个名为 Student 的类,它继承了 Person 类,并添加了一个 grade 属性和一个重写的 sayHello 方法。在构造函数中,我们使用 super 关键字来调用父类的构造函数。
通过继承,我们可以实现多态。在上面的示例中,Student 类重写了 sayHello 方法,这意味着当我们调用 sayHello 方法时,如果对象是 Student 类的实例,那么会调用 Student 类中的方法,否则会调用 Person 类中的方法。
3. 访问修饰符
在 TypeScript 中,我们可以使用访问修饰符来限制类的属性和方法的访问权限。TypeScript 支持三种访问修饰符:public、private 和 protected。
public:默认的访问修饰符,表示属性和方法可以被任何人访问。private:表示属性和方法只能在类内部访问。protected:表示属性和方法可以在类内部和子类中访问。
下面是一个访问修饰符示例:
class Animal {private name: string;protected age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}, and I'm ${this.age} years old.`);}
}class Cat extends Animal {constructor(name: string, age: number) {super(name, age);}sayHello() {console.log(`Hello, I'm a cat, and I'm ${this.age} years old.`);}
}const animal = new Animal('Tom', 3);
animal.sayHello(); // 输出:Hello, my name is Tom, and I'm 3 years old.
console.log(animal.name); // 编译错误:属性“name”为私有属性,只能在类“Animal”中访问。const cat = new Cat('Kitty', 2);
cat.sayHello(); // 输出:Hello, I'm a cat, and I'm 2 years old.
console.log(cat.age); // 输出:2
在上面的示例中,Animal 类中的 name 属性使用了 private 访问修饰符,因此只能在 Animal 类内部访问。而 age 属性使用了 protected 访问修饰符,因此可以在 Animal 类内部和 Cat 类中访问。
4. 抽象类和接口
在 TypeScript 中,我们可以使用抽象类和接口来定义类的规范。抽象类是一种不能被实例化的类,它只能被继承。接口则是一种定义了一组方法和属性的规范,它可以被类实现。下面是一个抽象类和接口示例:
abstract class Shape {abstract area(): number;
}interface Printable {print(): void;
}class Rectangle extends Shape implements Printable {width: number;height: number;constructor(width: number, height: number) {super();this.width = width;this.height = height;}area() {return this.width * this.height;}print() {console.log(`The area of the rectangle is ${this.area()}.`);}
}const rect = new Rectangle(3, 4);
rect.print(); // 输出:The area of the rectangle is 12.
在上面的示例中,我们定义了一个抽象类 Shape 和一个接口 Printable。Shape 类中有一个抽象方法 area,它必须被子类实现。Rectangle 类继承了 Shape 类,并实现了 Printable 接口。Rectangle 类中实现了 area 方法和 print 方法。
5. 泛型
在 TypeScript 中,我们可以使用泛型来定义类、函数和接口。泛型可以让我们在编写代码时不必指定具体类型,而是在使用时再指定类型。下面是一个泛型类示例:
class Pair<T, U> {first: T;second: U;constructor(first: T, second: U) {this.first = first;this.second = second;}
}const pair = new Pair('hello', 123);
console.log(pair.first); // 输出:hello
console.log(pair.second); // 输出:123
在上面的示例中,我们定义了一个泛型类 Pair,它有两个类型参数 T 和 U。在创建 Pair 对象时,我们可以指定 T 和 U 的具体类型。
6. 总结
本文详细介绍了 TypeScript 的 class 语法的操作和应用,包括基本语法、继承和多态、访问修饰符、抽象类和接口以及泛型。通过这些示例,我们可以更好地理解和应用 TypeScript 的 class 语法。
相关文章:
Typescript的class语法[类]的操作和应用
TypeScript 是一种面向对象的编程语言,它扩展了 JavaScript,为其添加了类型系统和其他一些特性。TypeScript 的 class 语法可以让开发者更加方便地使用面向对象的编程方式。本文将详细介绍 TypeScript 的 class 语法的操作和应用,并提供代码案…...
OPENCV实现暴力特征匹配
# -*- coding:utf-8 -*- """ 作者:794919561 日期:2023/9/1 """ import cv2 import numpy as np# 读...
揭秘亚马逊Amazon测评,掌握细节和技巧,提升产品销量和评论数量
亚马逊是全球最大的跨境电商平台,拥有全球65个国家的几十个网站。对于跨境卖家来说,亚马逊是最值得选择的平台之一。 亚马逊的八大站点分别是美国、加拿大、墨西哥、欧洲、澳大利亚、日本、中东和巴西。 美国站点是全球最大的零售市场,拥有…...
Linux线程互斥
目录 一、线程不安全 1.线程不安全现象 2.线程不安全程序的特质 3.线程不安全程序的原因 二、线程互斥 1.基本概念 2.锁 (1)认识锁 (2)互斥锁的使用 (3)代码的改造 3.锁的本质 (1&a…...
【仿写spring之ioc篇】三、检查是否实现了Aware接口并且执行对应的方法
Aware接口 Aware接口中只是设置了对应的set方法,目前只定义了三个Aware 以BeanNameAware为例 package com.ez4sterben.spring.ioc.factory.aware;/*** bean名字清楚** author ez4sterben* date 2023/08/31*/ public interface BeanNameAware {/*** 设置beanName* …...
C++ 异常处理
C 异常(Exception)是指在程序运行时产生的特殊情况,例如,尝试除以零的操作。异常提供了一种转移程序控制权的方式,异常处理涉及到三个关键字:try、catch、throw。 throw: 当问题出现时,程序会抛出一个异常。这是通过…...
OJ练习第157题——单词拆分
单词拆分 力扣链接:139. 单词拆分 题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 …...
若依tab-content面板失效、使用load的解决方法(附详细步骤)
【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 思路&…...
2023年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:拼点游戏 C和S两位同学一起玩拼点游戏。有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数。C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获…...
Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)
Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末🐕🐕🐕) 一.项目运行介绍 B站演示…...
Hadoop 3.2.4 集群搭建详细图文教程
目录 一、集群简介 二、Hadoop 集群部署方式 三、集群安装 3.1 集群角色规划 3.2 服务器基础环境准备 3.2.1 环境初始化 3.2.2 ssh 免密登录(在 hadoop01 上执行) 3.2.3 各个节点上安装 JDK 1.8 环境 3.3 安装 Hadoop 3.4 Hadoop 安装包目…...
STL的学习之一
1)STL扫盲 1)C标准库和标准模板库是不一样的 2)标准模板库是用泛型编程方式编写的函数或者类库; 3) SGI STL linux一般用,P.J.Plauger STL,visual2017 windows用 STL六大组件 : 容器,迭代器 STL 算法(说白了就是函数…...
如何使用Python进行数据科学实验?
使用Python进行数据科学实验通常需要以下步骤: 以上仅为使用Python进行数据科学实验的基本步骤,具体实验过程会根据具体问题和数据集的特点而有所不同。可以进一步学习和探索相关的数据科学和机器学习技术,以提高实验的效果和表现。 安装Pyt…...
华为数通方向HCIP-DataCom H12-821题库(拖拽题,知识点总结)
以下是我在现有题库中整理的需要重点关注的考点内容,如有遗漏小伙伴可以留言补充。...
第三课:C++实现PDF去水印
PDF去水印是一项非常复杂的任务,需要一定的计算机图形学知识和技术,也需要使用到一些专业的工具库。以下是一种可能的实现方法: 首先,需要将PDF文件解析成一系列图形元素,包括文字、矢量图形等。可以使用开源库Poppler或MuPDF来解析PDF文件。 接下来,需要判断PDF文件是否…...
实现Android分布式协同办公:将待办事件App与本地Web服务结合
AndServer AndServer 是 Android 平台的 Web Server 和 Web Framework,它基于编译时注解提供了类似 SpringMVC 的注解和功能。 Github :https://github.com/yanzhenjie/AndServer使用文档:https://yanzhenjie.com/AndServer/业务需求 实现待办事件APP本地启动Web服务,将本…...
VMware12.1.1安装Centos7
VMware12.1.1安装Centos7 1、下载相关软件 1.1 Centos7下载 官方下载链接: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso 1.2 VMware Workstation下载 VMware Workstation 12.1.1官方原版下载: https://dow…...
bazel构建原理
调度模型 传统构建系统有很多是基于任务的,例如 Ant,Maven,Gradle。用户可以自定义"任务"(Task),例如执行一段 shell 脚本。用户配置它们的依赖关系,构建系统则按照顺序调度。 基于 Task 的调度…...
matlab 点云的二进制形状描述子
目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码示例三、结果展示四、参数解析输入参数名称-值对应参数输出参数五、参考链接本文由CSDN点云侠原创,...
MongoDB实验——在Java应用程序中操作 MongoDB 数据
在Java应用程序中操作 MongoDB 数据 1. 启动MongoDB Shell 2. 切换到admin数据库,使用root账户 3.开启Eclipse,创建Java Project项目,命名为MongoJava File --> New --> Java Project 4.在MongoJava项目下新建包,包名为mo…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
