typescript命名空间(namespace)

简介:

个人理解:TypeScript中的命名空间其实是为功能文件做一个归类。

比方说我们所使用的的学校案例,我们的学生类,人类,学校类都可以在一个命名空间下进行定义。

一. 先来看下用命名空间的第一种写法

namespace MySchool {
    
    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}`);
        }
    }
    
    export class Student extends People {
        
        // 年级, 默认1
        private _grade: number = 1;
        
        // ts中的get方法。
        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}`);
        }
        
    }
    
    export class School {
        // 学校名称,默认希望小学
        name: string = '希望小学';
        // 学校里的学生,默认空
        studentList: Array<Student> = [];
        
        // any方法声明,没有限制方法的返回值。
        printInfo() {
            console.log(`name:${this.name}, studentList:${this.studentList.toString()}`);
        }
        
    }
    
}
 
export default MySchool

这种写法其实就是将三个类文件都写在一个叫 MySchool 的命名空间下,并且还是写在了一个文件中。

测试下效果:


import MySchoolNameSpace from './MySchool';
 
let school = new MySchoolNameSpace.School();
let student = new MySchoolNameSpace.Student();
 
// School { name: '希望小学', studentList: [] }
console.log(school);
// Student { name: '小明', age: 18, sex: true, hobby: [ '吃', '玩' ], _grade: 1 }
console.log(student);
school.studentList.push(student);
school.name = '杨浦区实验小学';
/**
 * School {
  name: '杨浦区实验小学',
  studentList:
   [ Student { name: '小明', age: 18, sex: true, hobby: [Array], _grade: 1 } ] }
 * */
console.log(school)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值