「TypeScript」入门进阶(三)✈️---类与接口

简介: 「TypeScript」入门进阶(三)✈️---类与接口

🎉 前言


  • 虽然之前有学过TypeScript但是平时业务上面都还是用JavaScript来开发导致逐渐对TypeScript生疏了。
  • 借此更文活动的机会再来一起学习一下TypeScript的知识吧。
  • 在之前的文章中我们TypeScript的基础知识过了一遍,是不是发现其实也不会很难呢。
  • 本文也是TypeScript进阶篇的第三篇,讲的是类与接口的那些事,关于基础篇可以看我之前分享的文章喔~
  • 本文大概1300+字,阅读可能需要十分钟~ 🥂


🌋 TypeScript类的实现(implement)


  • 在我们之前学习的类中,每个类只能继承一个类,但有没有这样一种情况,不同的类之间有共同的属性或方法。
  • 假设一个奶茶店要做一杯冰拿铁冰奶茶,我们都需要给它加糖加冰,这时候如果使用类与类继承的方式可能会不太方便甚至很难完成,这时候我们可不可以跟之前学习的接口一样规定一个类的特性。
  • 我们还是可以选择接口来规定一个类的形状,但类与接口的连接不可以使用:了,要使用implement实现。
  • 创建一个interface规定一个形状。
  • 创建一个类实现(implement)这个interface
  • 类中需要包括interface中的属性和方法
interface makeMilk {
  addIce():void
  addSugar():void
}
class MilkTea  implements makeMilk {
  addIce() {
      console.log('奶茶加冰');
  }
  addSugar(){
    console.log('奶茶加糖')
  }
}
class Latte implements makeMilk {
  addIce() {
      console.log('奶茶加冰');
  }
  addSugar(){
      console.log('奶茶加糖')
  }
}
let milk=new MilkTea;
let latte=new Latte;
milk.addIce()//奶茶加冰
milk.addSugar()//奶茶加糖
latte.addIce()//奶茶加冰
latte.addSugar()//奶茶加糖
复制代码
  • 在上面这个例子中我们可以看到制作一杯奶茶和拿铁都需要加糖加冰这个操作,而这个操作定义在interface中,我们可以通过实现接口来获取这两个方法。
  • 最后再将两个奶茶类拿铁类进行实例化,实例对象就可以使用这些方法啦~
  • 当然一个类也可以实现多个接口interface
interface Ice {
  addIce():void
}
interface Sugar {
  addSugar():void
}
class MilkTea  implements Ice,Sugar {
  addIce() {
      console.log('奶茶加冰');
  }
  addSugar(){
    console.log('奶茶加糖')
  }
}
let milk=new MilkTea;
milk.addIce()//奶茶加冰
milk.addSugar()//奶茶加糖
复制代码
  • 如上就是一个奶茶类同时实现了加冰加糖的接口。


🗻 TypeScript接口继承接口


  • 跟类继承类一样,相同的对象难免是可以继承的,接口也可以继承接口,连接方式也是使用extends
interface addIce{
  ice:string
}
interface addSugar extends addIce{
  sugar:string
}
let milk:addSugar={
  ice:'少冰',
  sugar:'半糖'
}
复制代码
  • 上述例子中定义了两个接口分别是addIceaddSugar,而addSugar继承了addIceice属性,所以在使用addSugar接口的时候形状必须一致。
  • milk变量中因为使用了addSugar接口,所以属性如果不符合形状就会报错。


🏖️ TypeScript接口继承类


  • TypeScript中我们可以使用接口来继承类。
class MilkTea {
  ice:string
  sugar:string
  constructor(ice:string,sugar:string){//constructor是一个构造方法,用来接收参数
      this.ice = ice;
      this.sugar = sugar;
  };
}
interface doSthing extends MilkTea{
}
let milk:doSthing={
  ice:'少冰',
  sugar:'半糖'
}
复制代码
  • 在上面的例子中,我们的interface接口规定了形状,而这个形状本身是没有东西的,但是它继承了MilkTea类的icesugar属性,所以就规定了使用这个接口interface的变量需要有icesugar属性。
  • 如上我们的milk给了它一个接口doSthing,所以这个变量需要有icesugar属性。
  • 有同学会问了:啊 接口跟类又不是同一种东西那怎么可以继承呢?,虽然这两不是一个东西,但是我们在定义一个class的时候其实也是定义了一种类型。
  • 就拿上面的MilkTea类来说,我们创建这个类的时候其实也是创建了一个MilkTea的类型,我们可以这样使用。
class MilkTea {
  ice:string
  sugar:string
  constructor(ice:string,sugar:string){//constructor是一个构造方法,用来接收参数
      this.ice = ice;
      this.sugar = sugar;
  };
}
let milk:MilkTea={
  ice:'少冰',
  sugar:'半糖'
}
复制代码
  • 这样是没有问题的,所以当我们doSthing接口继承时其实是集成了MilkTea这个类型,而这个类型大家是不是觉得很熟悉,他就是interface的写法类似啊,所以我们继承了一个类实际上就是继承了一个接口。
  • 值得一提的是,接口继承类的时候,只会继承它的实例属性和实例方法,继承不了构造函数。


👋 写在最后


  • 本文也算是记录一下TypeScript的学习,接下来我会持续输出TypeScript相关的知识,大家可以一起来学习。
  • 如果您觉得这篇文章有帮助到您的的话不妨🍉关注+点赞+收藏+评论+转发🍉支持一下哟~~😛


🌅 往期精彩


「TypeScript」入门基础(一)🎯---安装与基础数据类型

「TypeScript」入门基础(二)🎯---联合类型与接口

「TypeScript」入门基础(三)🎯---数组类型与函数类型

「TypeScript」入门基础(四)🎯---类型断言

「TypeScript」入门进阶(一)✈️---类型别名、字符串字面量与元组

「TypeScript」入门进阶(二)✈️--类


相关文章
|
2月前
|
JavaScript 前端开发
【TypeScript入门】TypeScript入门篇——数据类型
我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。
27 3
|
2月前
|
JavaScript 编译器
TypeScript中泛型在函数和类中的应用
【4月更文挑战第23天】TypeScript的泛型在函数和类中提供了灵活性,允许处理多种数据类型。了解泛型是掌握TypeScript类型系统的关键。
|
26天前
|
JavaScript 前端开发 程序员
TypeScript 类
TypeScript 类
|
29天前
|
JavaScript 索引 前端开发
9.【TypeScript 教程】接口(Interface)
9.【TypeScript 教程】接口(Interface)
15 4
|
5天前
|
JavaScript 前端开发 程序员
typescript入门笔记分享
typescript入门笔记分享
6 0
|
29天前
|
JavaScript 前端开发 开发者
10.【TypeScript 教程】类(Class)
10.【TypeScript 教程】类(Class)
11 2
|
6天前
|
JavaScript
TypeScript类
TypeScript类
8 0
|
26天前
|
JavaScript Java C#
typescript 类类型
typescript 类类型
|
26天前
|
JavaScript 编译器
TypeScript 接口
TypeScript 接口
|
2月前
|
JavaScript 前端开发 开发者
【Web 前端】TypeScript 中的接口是什么?
【5月更文挑战第1天】【Web 前端】TypeScript 中的接口是什么?