目录
二、class 类之间的继承和 interface接口实现:
TS中的高级类型:class类型,类型兼容性,交叉类型,泛型,keyof,索引签名类型,索引查询类型,映射类型。
一、Class 类:
TypeScript全面支持ES2015中引入的class关键字,并为其添加了类型注解和其他语法。class基本使用:
// class类型
class Person {}
// 创建class类型实例:
const p = new Person()
- 根据TS中类型推论,可以知道Person类的实例对象p的类型是Person。
- TS中的class,不仅提供了class的语法功能,也作为一种类型存在。
1.构造函数:
成员初始化后,才可以通过this.属性名来访问实例成员。需要为构造函数指定类型注解,否则会被隐式推断为any,构造函数不需要返回值类型。
class Person{
name: string
age: number
// 构造函数:
constructor(name: string, age: number) {
this.name = name
this.age = age
}
}
2.类的实例方法:
定义在类中的方法(函数),通过类的实例进行调用。
class Person{
name: string
age: number
// 构造函数:
constructor(name: string, age: number) {
this.name = name
this.age = age
}
// 实例方法:
showInfo(): void{
console.log("名称:" + this.name + "\t年龄:" + this.age)
}
}
二、class 类之间的继承和 interface接口实现:
1.类之间的继承关系:
通过extends关键字实现类之间的继承关系:
// 类之间的继承:
class Person{
showInfo(): void{
console.log("我是一个人!!!")
}
}
// 子类继承父类:
class Student extends Person{
name: string
age: number
}
// 实例化子类:
const stu = new Student()
// 通过子类实例调用父类方法:
stu.showInfo()
2.接口和类之间的实现关系:
通过implements关键字可以让一个类实现一个接口:
// 定义的接口:
interface FlyAble{
fly(): void
}
// 创建一个类实现接口:
class bird implements FlyAble{
fly() {
console.log("flying !!!")
}
}
三、类成员可见性:
类成员可见性,可以使用TS的权限修饰符:public(公共的),protected(受保护的),private(私有的)。
- public:表示公开的,公有的成员可以被任何地方访问,默认可见性。因为public是默认可见性,可以直接省略。
class Person{
public name: string
public showInfo(): void{
console.log(this.name)
}
}
- protected:表示受保护的,仅对其声明所在的类和子类中(非实例对象)可见。子类的方法内部可以通过this来访问父类中受保护的成员,但是对实例不可见。
- private:表示私有的,只在当前类中可见,对实例对象以及子类也是不可见的。
readonly 只读修饰符:
readonly:表示只读,用来防止在构造函数之外对属性进行赋值。
class Person{
// readonly表示只读修饰符,只能通过构造函数进行初始化:
readonly name: string
// 初始化只读属性:
constructor(name: string) {
this.name = name
}
public showInfo(): void{
console.log(this.name)
}
}
- 使用readonly修饰符,表示该属性只能读不能进行值的修改,注意该修饰符只能修饰属性不能修饰方法
- 注意:接口或者 {} 表示的对象类型的成员属性也可以使用readonly修饰。
四、类型兼容性:
两种类型系统:Structural Type System(结构化类型系统),Nominal Type Syetem(表明类型系统)。
TS采用的就是结构化类型系统,也叫做duck typing(鸭子系统),类型检查关注的是值所具有的形状。也就是说,在结构类型系统中,如果两个对象具有相同的形状,则认为他们是同一个类型。
1.类之间的类型兼容:
2.接口、函数之间的类型兼容:
五、交叉类型:
交叉类型(&):功能类似于接口继承(extends),用于组合多个类型为一个类型(常用于对象类型)。
本文含有隐藏内容,请 开通VIP 后查看