【TypeScript】class类型讲解

news2024/11/19 21:15:17

目录

class类型

构造函数

class类的继承

可见修饰符

只读修饰符


class类型

TypeScript支持ES引入的class关键字,并为其添加了类型注解和其他语法(例如:可见性修饰符)。

class person {
  // 声明初始值,可省略类型注解(TS类型推论为string)
  name:'张三'
  // 声明成员类型为 number 没有初始值
  age: number
}
const p = new person()
p.name
p.age

构造函数

在class构造函数中,需要为构造函数指定类型注解,否则会被隐式推断为any,构造函数不需要返回值类型。

class Person {
  name:string
  age:number
  constructor(name:string,age:number){
    this.name = name
    this.age = age 
  }
}
const p = new Person('张三',18)

在class的实例方法中,方法的类型注解(参数与返回值)与函数用法相同。

class Point {
  x=1
  y=2
  scale(n: number){
    this.x*=n
    this.y*=n
  }
}
const p = new Point()
p.scale(5)
console.log(p.x,p.y);// 5 10

class类的继承

在class类的继承中,提供了两种类的继承方式:1、extends(继承父类)  2、implements(实现接口)。注意:JS中只有extends,而implements是TS提供的。

class Animal {
  move(){
    console.log('我是动物');
  }
}
// 使用 extends 继承父类
class Dog extends Animal {
  name='狗'
  say(){
    console.log('我是狗');
  }
}
const p = new Dog()
p.move()// 我是动物
p.say()// 我是狗
console.log(p.name);// 狗
interface Animals {
  name: string
  say(): void
}
// Dog类继承接口Animals,意味着Dog类必须提供Animals接口中指定的所有方法和属性
class Dog implements Animals {
  name = 'hobble'
  say(): void {
    console.log('汪汪汪');
  }
}

可见修饰符

在class中,类的可见性可以使用TS来控制class的方法或属性对于class外的代码是否可见。可见性修饰符包括:public(公有的)、protected(受保护的)、private(私有的)。

class Animal1 {
  // 因为 public 是默认可见的,所以可以直接忽略
  public move(){
    console.log('我是动物');
  }
}
class Dog1 extends Animal1 {}
const p1 = new Dog1()
p1.move()// 我是动物


class Animal2 {
  // 仅对其声明的所在类和子类中(非实例对象)可见
  protected move(){
    console.log('我是动物');
  }
  run(){
    this.move
  }
}
class Dog2 extends Animal2 {
  say(){
    this.move
  }
}
const p2 = new Dog2()
// p.move() 报错


class Animal3 {
  // private表示私有的,只在当前类中可见,对实例对象以及子类是不可见的
  private move(){
    console.log('我是动物');
  }
  run(){
    this.move
  }
}
class Dog3 extends Animal3 {
  say(){
    // this.move 报错
  }
}

只读修饰符

除了可见修饰符之外,还有一个常见的修饰符就是:readonly(只读修饰符)。readonly:表示只读,用来防止在构造函数之外对属性进行赋值。

 class Person {
  // 注意:只要是readonly来修饰的属性,必须手动提供明确属性,否则就是字面量类型
  readonly age: number = 18
  constructor(age: number){
    this.age = age
  }
  setAge(){
    // 无法分配到 "age" ,因为它是只读属性。
    // this.age = 20 
  }
 }

注意:readonly只能修饰属性不能修饰方法。

在接口和{}表示的对象类型中,也可以使用 readonly 。

// 在接口中
interface People {
  readonly name: string
}

let obj: People = {
  name:'张三'
}
// obj.name = '李四' 报错

// 在对象中
let oj: { readonly name: string } = {
  name:'张三'
}
// oj.name = '李四' 报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

艾美捷超氧化物歧化酶检测试剂盒,活性检测说明

细胞和细胞外环境中大量的超氧化物歧化酶(SOD)对于预防与氧化应激相关的疾病至关重要。SOD突变约占家族性肌萎缩侧索硬化症(ALS)病例的20%。SOD在预防其他神经退行性疾病(如阿尔茨海默氏症、帕金森氏症和亨廷顿舞蹈症&…

美丽田园ipo上市,它的底气从何而来?

美丽田园医疗健康产业有限公司(简称美丽田园),中国最大的传统美容服务提供商,成立近三十年来,一直致力于美与健康的发展,坚持系统化标准化管理和美与健康一站式服务,为顾客提供舒适的美与健康新体验。近日,…

Matter理论介绍-通用-1-04:桥接器-其他功能

【源码、文档、软件、硬件、技术交流、技术支持,入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取,免安装,解压即用】 持续更新中,欢迎关注! 一、桥接器的配置流程 我们已经知道,桥接器和…

【QT】PySide6安装与运用

一、什么是PyQt 简单来说,PyQt就是用Python重构的Qt,一个强大的,创建跨平台GUI(Graphical User Interface)的工具包。开发者为Phil Thompson。 二、PySide与PyQt PyQt和PySide都是基于Python语言对Qt的实现,PyQt的推出时间要比…

paddle nlp taskflow 全家桶 包括代码生成与AIGC图片生成 一起探索paddle nlp 开包即用的能力吧

paddle nlp作为自然语言处理领域的全家桶,具有很多的不错的开箱即用的nlp能力。今天我们来一起看看基于paddle nlp中taskflow开箱即用的能力有哪些。 第一步先升级aistudio中的paddlenlp 保持最新版本。 pip install -U paddlenlpLooking in indexes: https://pypi…

ERP外网访问,快解析助力企业远程办公

ERP系统是现代信息技术和先进管理经验的有效结合,实现对企业经营活动的自动、完整的记录,替代重复劳动,对企业人力资源、物流、资金流、票据流和信息流等的科学管理,实现业务管理数据和财务数据高度统一,实现对企业业务…

论文导读 | 正则路径查询

前言 正则路径查询(Regular Path Query, RPQ)为带标签的图数据上重要的查询类型之一,旨在找出由至少一条满足条件的路径相连接的结点对,其中需满足的条件以正则表达式表达。当前对 RPQ 的研究以提升查询效率为目的,主…

php项目管理系统 。集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件

介绍 一款国产的项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。 管理思想注重实效,功能完备丰富,操作简洁高效&#x…

【Python】基础知识(列表,元组)

目录列表和元组列表创建列表访问下标切片操作遍历列表元素新增元素查找元素删除元素连接列表元组写在前面🍎:码字不易,如果对你有帮助的话,给个三连或者关注一下吧🍰,感谢支持!📣列表…

操作手册(GB8567——88)基于协同的在线表格forture-sheet

操作手册(GB8567——88) 1引言 1.1编写目的 为了帮助用户更好的上手本系统,加快用户对forture-sheet在线表格的快速入门,本操作手册详细介绍使用forture-sheet的部分基础操作以及注意细节。 1.2前景 待开发系统的名称&#x…

Docker+Jenkins+Gitee+Maven构建后台jar包后通过命令备份、替换、重启docker-compose编排的java服务

场景 docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例: docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例_霸道流氓气质的博客-CSDN博客 在上面使用docker-compose编排的ja…

Keil uVision5软件的操作与编写基础(入门)

目录 👬一、如何新建一个空白文档 👬二、程序编写 👬三、编译程序 Keil uVision5是一款编写单片机程序的必备软件。其图标为: 一、如何新建一个空白文档 1.打开Keil uVision5,将会出现工作界面。如图所示:…

Android .obb 详解

1.简介 在Android APP Bundle(aab)之前,上架Google Play 项目都是打包成APK上传,但是Google 对 APK大小是有限制的,刚开始是50M,后来扩展到100M,但是有些APK资源比较多,可能会大于100M, 基于这种情况,Google 允许上传…

音频怎么转换成文字?推荐这几个转文字的方法给你

在平时的工作中大家通常会先利用录音工具将会议内容录制下来,结束以后再根据录音来整理会议纪要,但一边听音频一边整理的操作既麻烦又费时间,还有可能会因为讲述的人语速快,而漏掉一些内容,从而导致效率不高&#xff0…

上海、广州、北京德国签证申请中心即将重新启动

德国签证中心关闭2年后,近日传来了好消息,上海、广州、北京德国签证申请中心即将重新启动,知识人网小编根据德国驻华领馆公布的信息整理并解读相关签证情况。 目前中国公民办理赴德签证,可以通过两种方式进行申请: 1.…

算法学习指南:什么是算法?

解释算法的实现逻辑就像讲故事一样。算法会在普通的解决方案中引入新颖的思路或进行某种创新。在本文中,我们将讨论一个简单问题的几个解决方案,解释影响算法性能的一些因素。在这个过程中,我将介绍一些用于分析算法性能的技巧。这些技巧与算…

Spring data JPA--02

Spring data JPA spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的规则进行**【方法命名】去写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、…

Kubectl 使用详解——k8s陈述式资源管理

目录 一、kubectl 简介 二、kubectl 的使用 1.基础用法 (1)配置kubectl自动补全 (2)查看版本信息 (3)查看资源对象信息 (4)查看集群信息 (5)查看日…

刷爆力扣之 Z 字形变换

刷爆力扣之 Z 字形变换 HELLO,各位看官大大好,我是阿呆 🙈🙈🙈 今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜 该专栏按照不同类别标签进行刷题&#xff0c…

为什么我建议线上高并发量的代码,一定要注意数据可能会不一致?

V-xin:ruyuan0330 获得600页原创精品文章汇总PDF 目录 前情提示什么是数据一致性?一个数据计算链路的梳理数据计算链路的bug电商库存数据的不一致问题大型系统的数据不一致排查有多困难 一、前情提示 这篇文章,咱们继续来聊聊之前的亿级流…