TS(类 接口 泛型)

devtools/2024/11/7 8:50:03/

文章目录

    • 复习相关知识
    • 属性修饰符
      • public 修饰符
      • 属性的简写形式
    • protected修饰符
      • private修饰符
      • readonly修饰符
    • 抽象类
  • 接口(interface)
    • 定义类结构
    • 定义对象结构
    • 定义函数结构
    • 接口之间的继承
    • 接口自动合并 (可重复定义)
    • 一些相似的概念的区别
      • 1.interface和type的区别
      • 2.interface和抽象类的区别
  • 泛型

复习相关知识

在这里插入图片描述
在这里插入图片描述

属性修饰符

在这里插入图片描述

public 修饰符

在这里插入图片描述
在这里插入图片描述

属性的简写形式

完整写法

class Person {public name: string;public age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}
}

简写形式

class Person {constructor(public name: string,public age: number) { }
}

protected修饰符

在这里插入图片描述
在这里插入图片描述

private修饰符

class Person {constructor(public name: string,public age: number,// IDCard属性为私有的(private)属性,只能在【类内部】使⽤private IDCard: string) {}private getPrivateInfo() {// 类内部可以访问私有的(private)属性 —— IDCardreturn `身份证号码为:${this.IDCard}`;}getInfo() {// 类内部可以访问受保护的(protected)属性 —— name和agereturn `我叫: ${this.name}, 今年刚满${this.age}`;}getFullInfo() {// 类内部可以访问公开的getInfo⽅法,也可以访问私有的getPrivateInfo⽅法return this.getInfo() + "," + this.getPrivateInfo();}
}
const p1 = new Person("张三", 18, "110114198702034432");
console.log(p1.getFullInfo());
console.log(p1.getInfo());
console.log(p1.name);// 以下代码均报错
// p1.IDCard
// p1.getPrivateInfo()

readonly修饰符

在这里插入图片描述

抽象类

概述: 抽象类是一种无法被实例化的类 专门用来定义类的结构和行为,类中可以写抽象方法也可以写具体实现
抽象类主要用来为其派生类提供一个基础结构 要求其派生类必须实现其中的抽象方法

简记:抽象类不能实例化,其意义是可以被继承,抽象类里可以有普通方法,也可以有抽象方法 抽象方法没有函数体 (即没有{})

过以下场景,理解抽象类
我们定义⼀个抽象类 Package ,表示所有包裹的基本结构,任何包裹都有重量属性 weight ,包裹都需要计算运费。但不同类型的包裹(如:标准速度、特快专递)都有不同的运费计算方式,因此用于计算运费的 calculate 方法是⼀个抽象方法,必须由具体的子类来实现。

在这里插入图片描述
StandardPackage 类继承了 Package ,实现了 calculate 方法:

第一个weight不写public的原因是因为 weight是父类的属性(本身写一般写法的时候就不需要声明
然后再在构造器里面写this.weight=weight) 只有子类独有的属性 使用简写形式的时候才需要public

在这里插入图片描述

在这里插入图片描述

总结:何时使用抽象类?
1.定义通用接口:为一组相关的类定义通用的行为(方法或属性)时
2.提供基础实现:在抽象类中提供某些方法或为其提供基础实现,这样派生类就可以继承这些实现
3.确保关键实现:在抽象类中提供某些方法或为其提供基础实现,这样派生类就可以继承这些实现
共享代码和逻辑:当多个类需要共享部分代码时,抽象类可以避免代码重复

接口(interface)

interface是一种定义结构的方式,主要作用是为类 对象 函数等规定一种契约,这样可以确保代码的一致性和类型安全,但要注意
interface 只能定义格式,不能包含任何实现

定义类结构

在这里插入图片描述

定义对象结构

注意 对象结构不需要 implements
在这里插入图片描述

定义函数结构

在这里插入图片描述

接口之间的继承

一个interface继承另一个interface从而实现代码的复用
在这里插入图片描述

接口自动合并 (可重复定义)

在这里插入图片描述

何时使用接口
1.定义对象的格式:描述数据模型,API响应格式,配置对象等等 是开发中用的最多的场景
2.类的契约:规定一个类需要实现哪些属性和方法
3.扩展已有接口:一般用于扩展第三方库的类型,这种特性在大型项目中可能会用到

一些相似的概念的区别

1.interface和type的区别

相同点:interface和type都可以用于定义对象的结构 在定义对象结构时,两者可以互换
不同点:interface 更专注于定义对象和类的结构 支持继承 合并
type可以定义类型别名 联合类型 交叉类型 但不支持继承和自动合并
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.interface和抽象类的区别

相同点:都能定义一个类的格式(定义类应遵循的契约)
不相同:
接口: 只能描述结构 不能有任何实现代码 一个类就可以实现多个接口
抽象类: 既可以包含抽象方法 也可以包含具体方法 一个类只能继承一个抽象类

在这里插入图片描述

泛型

泛型允许我们在定义函数、类或接⼝时,使⽤类型参数来表示未指定的类型,这些参数在具体使⽤时,才被指定具体的类型,泛型能让同⼀段代码适⽤于多种类型,同时仍然保持类型的安全性

举例:如下代码中 就是泛型( 不一定非叫T ) 设置泛型后即可在函数中使用T来表示该类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/131966.html

相关文章

【docker】6. 镜像仓库/镜像概念

Docker Registry(镜像仓库) 什么是 Docker Registry 镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。 镜像仓库管理多个 Repository, Repository 通过命名来区分。…

Django命令行操作用户(manage.py工具)

一、创建超级用户 python manage.py createsuperuser 之后会提示输入用户名、邮箱、密码。根据提示输入即可 二、创建普通用户 from django.contrib.auth.models import UserUser.objects.create_user(zhangsan,zhangsan163.com,123456) 使用 User.objects.create_user 方…

二叉树从右侧所能看到的节点值 (DFS)

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: []提示: 二…

软考:案例题分析1101

22年第一题:架构设计与评估 分析文字,识别需求和质量属性?这里需要记忆质量属性有那些,区分需求和质量属性,能区分出质量属性之间的区别。 我的回答: 差距分析: 根据题目中功能的特点&#xff…

【LeetCode】【算法】394. 字符串解码

LeetCode 394. 字符串解码 题目描述 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的;输入字…

【数据结构】树-二叉树-堆(下)

🍃 如果觉得本系列文章内容还不错,欢迎订阅🚩 🎊个人主页:小编的个人主页 🎀 🎉欢迎大家点赞👍收藏⭐文章 ✌️ 🤞 🤟 🤘 🤙 👈 &…

Renesas R7FA8D1BH (Cortex®-M85) Flash的功能介绍

目录 概述 1 Flash的功能介绍 1.1 功能特征 1.2 时钟配置 1.3 注意点 2 使用方法介绍 2.1 BGO 操作注意事项 2.2 代码Flash注意事项 2.3 Flash时钟(FCLK) 2.4 中断 2.5 注意点 2.6 Flash应用的限制 3 应用函数接口 3.1 R_FLASH_HP_Open() …

反序列化失败问题

关于ROS2(Robot Operating System 2)中的反序列化失败问题,通常这个问题可能出现在订阅端,因为反序列化是指将接收到的数据流转换成数据结构,例如对象。如果订阅端接收到的数据格式与预期不符,或者使用的反…