赞
踩
TypeScript作为JavaScript的超集,也是支持使用class关键字的,并且还可以对类的属性和方法等进行静态类型检测。
在封装某些业务的时候,类具有更强大封装性。
类的定义我们通常会使用class关键字:
在面向对象的世界里,任何事物都可以使用类的结构来描述;
类中包含特有的属性和方法;
class Person { //声明类的属性 name!: string age: number //构造函数 constructor(name: string, age: number){ //设置初始化值 //name可以不初始化,因为声明时name!: string //this.name = name this.age = age } //类中自己的函数 running() { console.log("Person:"this.name + "running!") } eating() { console.log("Person:"this.name + "eating!") } }
class Student extends Person { //Student类的属性声明 sno: number constructor(name: string, age: number, sno: number){ super(name, age) this.sno = sno } //Student类的方法stdying studying() { console.log("Student:"this.name + "studying") } eating() { console.log("Student:" + "student eating!") } running() { super.running(); console.log("Student:" + "student running!") } } const s = new Student("kobe", 19, 188888) s.studying() s.eating() s.running() console.log(s.age) console.log(s.name) console.log(s.sno) //输出结果: Student:kobestudying Student:student eating! Person:koberunning! Student:student running! kobe 19 188888
在TypeScript中,类的属性和方法支持三种修饰符: public、private、protected:
如果有一个属性我们不希望外界可以任意的修改,只希望确定值后直接使用,那么可以使用readonly:
在前面一些私有属性我们是不能直接访问的,或者某些属性我们想要监听它的获取(getter)和设置(setter)的过程,这个时候我们可以使用存取器。
class Person { private _name: string //setters属性 set name(newValue) { this._name = newValue } //getters属性 get name() { return this._name } constructor(name: string) { this.name = name } } const p = new Person("jack") p.name = "kobe" //调用setters函数 console.log(p.name) //调用getters函数
TypeScript 提供了特殊的语法,可以把一个构造函数参数转成一个同名同值的类属性。这些就被称为参数属性。
类本身也是可以作为一种数据类型的:
在TypeScript中没有具体实现的方法(没有方法体),就是抽象方法。
抽象方法,必须存在于抽象类中;
抽象类是使用abstract声明的类;
举个栗子理解一下:我们知道,继承是多态使用的前提。所以在定义很多通用的调用接口时, 我们通常会让调用者传入父类,通过多态来实现更加灵活的调用方式。但是,父类本身可能并不需要对某些方法进行具体的实现,所以父类中定义的方法,我们可以定义为抽象方法。
抽象类特点:
对象类型中的每个属性可以说明它的类型、属性是否可选、属性是否只读等信息。
可选属性
只读属性
在 TypeScript 中,属性可以被标记为 readonly,这不会改变任何运行时的行为;
但在类型检查的时候,一个标记为 readonly的属性是不能被写入的。
有的时候,我们不能提前知道一个类型里的所有属性的名字,但是我们知道这些值的特征。这种情况,我们就可以用一个索引签名来描述可能的值的类型。
//定义枚举类型 enum Direction { LEFT, RIGHT } function turnDirection(direction: Direction) { switch(direction) { case Direction.LEFT: console.log("左移") break case Direction.RIGHT: console.log("右移") break } } //监听键盘的点击 turnDirection(Direction.LEFT)
enum Direction {
LEFT = 0,
RIGHT = 1
}
enum Direction {
//若给LEFT赋值为100
LEFT = 100,
//那么RIGHT默认会从100递增为101
RIGHT = 101
}
enum Direction {
LEFT = "LEFT",
RIGHT = "RIGHT"
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。