简介:

TypeScript是面向对象的,TypeScript中类的写法其实和我们写Java,C#等等面向对象语言的语法基本一致。它是JavaScript的一个超集,本质上向JavaScript添加了可选的静态类型和面向对象编程。

 

本文内容介绍:

    1.了解TypeScript中的类的概念以及使用。

    2.了解TypeScript中继承的使用以及文件的引用。

    3.为了方便我们可以更加直观的区分TypeScript中在类中的成员属性,方法每个写法的不同,所以我在每个类中都使用了不同的写法,以便区分每种写法的不同点,优缺点。也是为了让我们可以清楚的知道那种写法更适合当前项目,更适合自己。

    4.了解TypeScript中类的方法重载以及使用父类的属性和方法。

    5.本文所用到的类: people (人) -> student (学生) -> school (学校)

 

一、人 People Classes

人可以有姓名,年龄,性别,爱好等多个共同点,在编程中我们可以称为属性。

class People {
    
    // 姓名, 默认小明
    private name: string = '小明';
    // 年龄, 默认18
    private age: number = 18;
    // 性别, true = 男, false = 女
    private sex: boolean = true;
    // 爱好, 默认 吃,玩
    private hobby: Array<string> = ['吃', '玩'];
    
    getName(): string{
        return this.name;
    }
    
    getAge(): number {
        return this.age;
    }
    
    getSex(): boolean {
        return this.sex;
    }
    
    getHobby(): Array<string> {
        return this.hobby;
    }
    
    setSex(value: boolean) {
        this.sex = value;
    }
    
    setName(value: string){
        this.name = value;
    }
    
    setAge(value: number){
        this.age = value;
    }
    
    setHobby(value: Array<string>){
        this.hobby = value;
    }
    
    toString (): string{
        let printString = `name:${this.name} , age:${this.age} , sex:${this.sex} , hobby:${this.hobby}`;
        return printString;
    }
    
    printInfo(): void {
        console.log(
            `name:${this.name} ,
            age:${this.age} ,
            sex:${this.sex} ,
            hobby:${this.hobby}`
        );
    }
    
};

let p: People  = new People();
// name:小明 , age:18 , sex:true , hobby:吃,玩
console.log(p.toString());
p.setAge(30);
p.getHobby().push('学习');
p.setSex(false);
p.setName('大明');
// name:大明 , age:30 , sex:false , hobby:吃,玩,学习
p.printInfo();

二、 学生 Student

 学生是人,所以是包含人所含有的共同点,并且学生也会有自己的延伸点。所以每个学生多了一个年级,意义是这个学生是几年级的。

import People from "./People";

class Student extends People{
    
    // 年级, 默认1
    private _grade: number = 1;
    
    get grade(): number {
        return this._grade;
    }
    
    set grade(value: number) {
        this._grade = value;
    }
    
    toString(): string {
        return super.toString() + `, grade:${this.grade}`;
    }
    
    printInfo(): void {
        super.printInfo();
        console.log(`grade:${this.grade}`);
    }
}

let student: Student = new Student();
// 打印: name:小明 , age:18 , sex:true , hobby:吃,玩, grade:1
console.log(student.toString());
student.grade = 2;
student.setName('小刚');
student.setAge(22);
// 打印: name:小刚, age:22, sex:true, hobby:吃,玩
// grade:2
student.printInfo();
export {};

 

三、 学校 School

学校里面会有学生,学校也会有自己的学校名称。

import {Student} from "./Student";

class School {
    // 学校名称,默认希望小学
    name: string = '希望小学';
    // 学校里的学生,默认空
    studentList: Array<Student> = [];
    
    // any方法声明,没有限制方法的返回值。
    printInfo(){
        console.log(`name:${this.name}, studentList:${this.studentList.toString()}`);
    }
}


let school: School = new School();
//name:希望小学, studentList:
school.printInfo();

school.name = '上海市复旦大学附属实验小学';

let student1: Student = new Student();
student1.grade = 3;
student1.setName('LSH');
student1.setAge(8);

let student2: Student = new Student();
student2.grade = 4;
student2.setName('LX');
student2.setAge(9);

school.studentList.push(student1,student2);

//name:上海市复旦大学附属实验小学, studentList:name:LSH , age:8 , sex:true , hobby:吃,玩, grade:3,name:LX , age:9 , sex:true , hobby:吃,玩, grade:4
school.printInfo();

总结:

    1. 在People类中,我使用了大家熟悉的get , set方法。

    2. 在Student类中,我使用了TypeScript的get,set方法。

    3. 在School类中,我使用了不限制的写法。

    4. 个人建议如果get,set方法中不需要加控制的话。建议直接使用第三种方法。