• 【TypeScript】class面向对象&类型兼容&交叉类型


    目录

    一、Class 类:

    1.构造函数:

    2.类的实例方法:

    二、class 类之间的继承和 interface接口实现:

    1.类之间的继承关系:

    2.接口和类之间的实现关系:

    三、类成员可见性:

    readonly 只读修饰符:

    四、类型兼容性:

    1.类之间的类型兼容:

    2.接口、函数之间的类型兼容:

    五、交叉类型:


            TS中的高级类型:class类型,类型兼容性,交叉类型,泛型,keyof,索引签名类型,索引查询类型,映射类型。


    一、Class 类:

            TypeScript全面支持ES2015中引入的class关键字,并为其添加了类型注解和其他语法。class基本使用:

    1. // class类型
    2. class Person {}
    3. // 创建class类型实例:
    4. const p = new Person()
    • 根据TS中类型推论,可以知道Person类的实例对象p的类型是Person。
    • TS中的class,不仅提供了class的语法功能,也作为一种类型存在。

    1.构造函数:

            成员初始化后,才可以通过this.属性名来访问实例成员。需要为构造函数指定类型注解,否则会被隐式推断为any,构造函数不需要返回值类型。

    1. class Person{
    2. name: string
    3. age: number
    4. // 构造函数:
    5. constructor(name: string, age: number) {
    6. this.name = name
    7. this.age = age
    8. }
    9. }

    2.类的实例方法:

            定义在类中的方法(函数),通过类的实例进行调用。

    1. class Person{
    2. name: string
    3. age: number
    4. // 构造函数:
    5. constructor(name: string, age: number) {
    6. this.name = name
    7. this.age = age
    8. }
    9. // 实例方法:
    10. showInfo(): void{
    11. console.log("名称:" + this.name + "\t年龄:" + this.age)
    12. }
    13. }

    二、class 类之间的继承和 interface接口实现:

    1.类之间的继承关系:

            通过extends关键字实现类之间的继承关系:

    1. // 类之间的继承:
    2. class Person{
    3. showInfo(): void{
    4. console.log("我是一个人!!!")
    5. }
    6. }
    7. // 子类继承父类:
    8. class Student extends Person{
    9. name: string
    10. age: number
    11. }
    12. // 实例化子类:
    13. const stu = new Student()
    14. // 通过子类实例调用父类方法:
    15. stu.showInfo()

    2.接口和类之间的实现关系:

            通过implements关键字可以让一个类实现一个接口:

    1. // 定义的接口:
    2. interface FlyAble{
    3. fly(): void
    4. }
    5. // 创建一个类实现接口:
    6. class bird implements FlyAble{
    7. fly() {
    8. console.log("flying !!!")
    9. }
    10. }

    三、类成员可见性:

            类成员可见性,可以使用TS的权限修饰符:public(公共的),protected(受保护的),private(私有的)。

    • public:表示公开的,公有的成员可以被任何地方访问,默认可见性。因为public是默认可见性,可以直接省略。
    1. class Person{
    2. public name: string
    3. public showInfo(): void{
    4. console.log(this.name)
    5. }
    6. }
    • protected:表示受保护的,仅对其声明所在的类和子类中(非实例对象)可见。子类的方法内部可以通过this来访问父类中受保护的成员,但是对实例不可见。
    • private:表示私有的,只在当前类中可见,对实例对象以及子类也是不可见的。

    readonly 只读修饰符:

            readonly:表示只读,用来防止在构造函数之外对属性进行赋值。

    1. class Person{
    2. // readonly表示只读修饰符,只能通过构造函数进行初始化:
    3. readonly name: string
    4. // 初始化只读属性:
    5. constructor(name: string) {
    6. this.name = name
    7. }
    8. public showInfo(): void{
    9. console.log(this.name)
    10. }
    11. }
    • 使用readonly修饰符,表示该属性只能读不能进行值的修改,注意该修饰符只能修饰属性不能修饰方法
    • 注意:接口或者 {} 表示的对象类型的成员属性也可以使用readonly修饰。

    四、类型兼容性:

            两种类型系统:Structural Type System(结构化类型系统),Nominal Type Syetem(表明类型系统)。

            TS采用的就是结构化类型系统,也叫做duck typing(鸭子系统),类型检查关注的是值所具有的形状。也就是说,在结构类型系统中,如果两个对象具有相同的形状,则认为他们是同一个类型。

    1.类之间的类型兼容:

    2.接口、函数之间的类型兼容:

     


    五、交叉类型:

            交叉类型(&):功能类似于接口继承(extends),用于组合多个类型为一个类型(常用于对象类型)。

  • 相关阅读:
    【C++模块实现】| 【06】日志模块添加循环覆盖写文件功能
    网络安全(黑客)自学
    Axios+Elementui+Vue+原生JS+后端原生java的JAVA web小组项目踩坑总结
    IEEE期刊如何查找论文模板
    USB3.0:VL817Q7-C0的LAYOUT指南
    FreeRTOS内存管理分析
    得不到你的心,就用“分布式锁”锁住你的人
    搭个ChatGPT算法模型,离Java程序员有多远?
    noip游记
    【CV】第 13 章:用于处理图像的高级 GAN
  • 原文地址:https://blog.csdn.net/weixin_52058417/article/details/126557109