当前位置: 首页 > news >正文

TS学习03-类

calss A {name: stringconstructor(name:string) {this.name = name}greet() {return 'hello,' + this.name}
}
let people = new A('RenNing')

继承

子类是一个派生类,他派生自父类(基类),通过 extends关键字

派生类通常被称作 子类,基类通常被称作 超类

派生类包含了一个构造函数,它 必须调用 super()

公共、私有、受保护的修饰符

public

ts中 成员默认为public

private

不能再声明他的类的外部访问

子类无法访问 private

class Animal {private name: string;constructor(thenname: string) {this.name = theName}
}
new Animal('cat').name //报错

protected

protected成员可以再派生类中访问

构造函数(constructor)被标记成 protected 后,不能实例化该类,当是能被继承

class A{protected constructor() {}
}
class B extends A {}
let a = new A() //错误-A的构造函数时被保护的
let b = new B() //ok

readonly修饰符

readonly关键字将属性设置为只读,只读属性必须再声明时构造函数里被初始化。

class A {readonly name: string;readonly age: number = 18
}
(new A()).name = 1 //报错

参数属性

参数属性可以方便地让我们在一个地方定义并初始化一个成员

改造上面的例子后

class A {constructor(readonly name: string, readonly age: number) {}say() {console.log(this.name,this.age)}
}
let a = new A('Ren', 18)
a.say() //Ren 18

我们把声明和赋值合并至一处

存取器

ts 指出通过getter/setters来截取对象成员访问。

let passcode = 'searet passcode'
class Employee {private _fullName: string;get fullName() :string {return this._fullName}set fullName(newValue: string) {if(passcode && passcode == 'secret passcode') {this._fullName = newValue}else {console.log('Error Unauthorized update of employee')}}
}
let employee = new Employee()

只带有 get不带有 set的存取器自动被推断为 readonly

静态属性

使用 static定义

class A {static name: string = 'RenNing'
}
console.log(A.name)//RenNing

抽象类abstract

作为其他派生类的基类使用,不会被实例化,可定义抽象类、抽象方法

abstract class A {abstract makeSound(): void;move: void {console.log('roamin the earch...')}
}

抽象类中的抽象方法不包含具体实现,并且必须再派生类中事项,

与接口方法相似:只定义方法签名,但不包含方法体。abstract 可以包含访问修饰符

abstract class A {abstract say() :void//必须在派生类中实现sing(){console.log('sing-A')}
}
class B extends A {say():void{console.log('say-B')}song() :void {console.log('song-B')}
}
let point: A
point = new A()//错误:不能实例化抽象类
point = new B()
point.say()say-B
point.song()//错误:方法再声明抽象类中不存在let point: B
point = new B()
point.say()//say-B
point.song()//song-B
point.sing()//sing-A

高级技巧

取类的 类型 **typeof 类名, 这个类型包含了类的所有静态成员和构造函数

class A {static name: string = "Ren"age: number = 18
}
let aMaker: type A = A
console.log(A.name)//Renlet b: A = new A()
console.log(b.age)//18console.log(typeof A)// function

把类当做接口使用

类定义会创建两个东西:类的实例类型和一个构造函数

class A {x: number;y:number}
interface Point3d extends Point {z: number}
let point3d: Point2d = {x: 1, y: 2, z: 3}

无法直接实例化

接口继承类

构造函数被 protected 修饰

抽象类

http://www.lryc.cn/news/114472.html

相关文章:

  • FastAPI(七)应用配置
  • eclipse Java Code_Style Code_Templates
  • 01《Detecting Software Attacks on Embedded IoT Devices》随笔
  • APP外包开发的学习流程
  • 第0章 环境搭建汇总
  • 大数据培训课程-《机器学习从入门到精通》上新啦
  • 暗黑版GPT流窜暗网 降低犯罪门槛
  • 数电与Verilog基础知识之同步和异步、同步复位与异步复位
  • JAVA Android 正则表达式
  • 【MFC】07.MFC第三大机制:消息映射-笔记
  • 【jvm】jvm的生命周期
  • 激光雷达测距和摄像头联合棋盘格反射率标定板
  • 【Docker】docker镜像+nginx部署vue项目:
  • 文件编辑(vi/vim)
  • 1007 Maximum Subsequence Sum (PAT甲级)
  • 虚拟机centos7配置网络
  • ChatGPT实战:创业咨询,少走弯路,少踩坑
  • LangChain手记 Overview
  • Vue_02:详细语法以及代码示例 + 知识点练习 + 综合案例(第二期)
  • [腾讯云 Cloud studio 实战训练营] 制作Scrapy Demo爬取起点网月票榜小说数据
  • 使用paddle进行酒店评论的情感分类5——batch准备
  • 04-1_Qt 5.9 C++开发指南_常用界面设计组件_字符串QString
  • Centos 从0搭建grafana和Prometheus 服务以及问题解决
  • 【代码解读】RRNet: A Hybrid Detector for Object Detection in Drone-captured Images
  • python人工智能可以干什么,python人工智能能干什么
  • K8s工作原理
  • go错误集(持续更新)
  • 【Docker】Docker中network的概要、常用命令、网络模式以及底层ip和容器映射变化的详细讲解
  • arcgis栅格数据之最佳路径分析
  • docker服务器部署Django