TS(类 接口 泛型)

文章目录

复习相关知识


属性修饰符

public 修饰符


属性的简写形式

完整写法

typescript 复制代码
class Person {
  public name: string;
  public age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

简写形式

typescript 复制代码
class Person {
  constructor(
    public name: string,
    public age: number
  ) { }
}

protected修饰符


private修饰符

typescript 复制代码
class Person {
  constructor(
    public name: string,
    public age: number,
    // IDCard属性为私有的(private)属性,只能在【类内部】使⽤
    private IDCard: string
  ) {}
  private getPrivateInfo() {
    // 类内部可以访问私有的(private)属性 ------ IDCard
    return `身份证号码为:${this.IDCard}`;
  }
  getInfo() {
    // 类内部可以访问受保护的(protected)属性 ------ name和age
    return `我叫: ${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来表示该类型




相关推荐
纸上的彩虹29 分钟前
半年一百个页面,重构系统也重构了我对前端工作的理解
前端·程序员·架构
李艺为34 分钟前
根据apk包名动态修改Android品牌与型号
android·开发语言
be or not to be1 小时前
深入理解 CSS 浮动布局(float)
前端·css
黄河滴滴1 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
LYFlied1 小时前
【每日算法】LeetCode 1143. 最长公共子序列
前端·算法·leetcode·职场和发展·动态规划
老华带你飞1 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
superman超哥1 小时前
Rust Workspace 多项目管理:单体仓库的优雅组织
开发语言·rust·多项目管理·rust workspace·单体仓库
小徐_23332 小时前
2025 前端开源三年,npm 发包卡我半天
前端·npm·github
C_心欲无痕2 小时前
vue3 - 类与样式的绑定
javascript·vue.js·vue3
kylezhao20192 小时前
C#通过HSLCommunication库操作PLC用法
开发语言·c#