TypeScript 类入门

举报
vike 发表于 2021/10/29 13:09:22 2021/10/29
【摘要】 搭建环境项目结构主项目目录srccreate_class.tsindex.htmltsconfig.jsontsconfig.json文件配置{ "compilerOptions": { "module": "es2015", "target": "es2015", "strict": true, "outDir": "./di...

搭建环境

  • 项目结构

    • 主项目目录
      • src
        • create_class.ts
      • index.html
      • tsconfig.json
  • tsconfig.json文件配置

{
    "compilerOptions": {
        "module": "es2015",
        "target": "es2015",
        "strict": true,
        "outDir": "./dist"
    },
    "include": [
        "./src/**/*"
    ]
}

定义类

  • 创建对象 必须先定义类。 所谓类可以理解为对象的模型
// 使用class关键字定义一个类
/*
    对象中主要包含了两个部分:
    属性
    方法
 */
class Person {
    /*
        直接定义的属性是实例属性 需要通过对象的实例去访问
        const per = new Person()
        per.name

        使用static开头的是静态属性(类属性) 可以直接通过类名.属性获取
        Person.age
     */


    // 定义实例属性
    name: string = 'vike'
    // 只读实例属性 无法修改
    readonly sex: string = '男'
    // 在属性前使用static关键字可以定义类属性(静态属性)
    static age: number = 18

    // 平时使用 有自动类型判断
    names = 'vike' 
    ages = 18

    // 定义实例方法 调用使用实例.方法名
    sayHello() {
        console.log('Hello vike!')
    }

    // 定义类方法 调用使用类名.方法名
    static sayHellos() {
        console.log('Hello vikes!')
    }
}
const per = new Person()
console.log(per)

构造函数

  • 新建一个ts文件 编写类里构造函数
class Dog {
    name:string
    age:number

    // constructor 被称为构造函数 会在对象创建时调用
    constructor(name:string, age:number) {
        //  在实例方法中,this表示当前的实例
        // 在构造函数中当前对象就是新建的那个对象
        // 可以通过this向新建对象中添加属性
        console.log(this)
        this.name = name
        this.age = age
    }

    // 实例方法
    bark() {
        alert('汪汪汪')
    }
}
// 接收两个参数 name age
const dog = new Dog('旺财',3)
const dog1 = new Dog('小黑',5)
console.log(dog)

类的继承

  • ocp原则 对扩展开放 对修改关闭
(function () {
    // 定义一个动物的类
    class Animal {
        name: string
        age: number

        constructor(name: string, age: number) {
            this.name = name
            this.age = age
        }

        sayHello() {
            console.log('动物在叫')
        }
    }
    // 定义一个狗的类 使dog类继承Animal类
    // 此时Animal类称为父类 dog类称为子类
    // 使用继承后 子类将会拥有父类的属性和方法
    // 通过继承就可以让共用属性方法复用 不用重复写
    // 如果要扩展 直接加就可以
    class Dog extends Animal {
        // 扩展
        run() {
            console.log(`${this.name}在跑`)
        }
        // 如果子类方法和父类方法重复 子类会覆盖父类方法
        // 方法的重写
        sayHello() {
            console.log('汪汪汪')
        }
    }
    // 定义一个猫类 使cat类继承Animal类
    class Cat extends Animal {

    }


    const dog = new Dog('小黄', 3)
    const cat = new Cat('小喵', 5)

})()

super关键字

  • super是指当前类的父类
(function () {
    class Animal {
        name: string

        constructor(name: string) {
            this.name = name
        }

        sayHello() {
            console.log('动物在叫')
        }
    }

    class Dog extends Animal {
        age:number
        // 如果在子类的构造函数中初始化属性 必须调用父类的构造函数
        constructor(name:string,age:number) {
            super(name)
            this.age = age
        }
        sayHello() {
            // 在当前方法中 super表示当前的父类
            super.sayHello()
        }
    }
})()

抽象类

(function () {
    /*
        abstract 开头的是抽象类
        抽象类和其他类唯一区别就是不能创建实例对象 只能被继承
        抽象类中可以添加抽象方法
     */
    abstract  class Animal {
        name: string

        constructor(name: string) {
            this.name = name
        }
        // 抽象方法只能在抽象类中定义
        // 并且子类必须对方法重写
        abstract sayHello():void
    }

    class Dog extends Animal {
        sayHello() {
            console.log('汪汪汪')
        }
    }


})()

总结

  • 今日份 ts类知识get~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。