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来表示该类型




相关推荐
Larcher3 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端
Larcher3 小时前
大模型为什么每次回答都不一样?一文搞懂 Temperature、Top K 与 Top P
javascript·后端
名字还没想好☜5 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
用户938515635075 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep6 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端6 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
eric-sjq6 小时前
10 分钟实战:用 0.6B 本地模型生成中文网页(WanlyFrontend + 编译器全流程)
javascript·机器学习·自然语言处理·html
浮生望6 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
To_OC7 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
90后的晨仔7 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js