TypeScript 基础学习(五)


今天接着学习ts中的类相关知识

之前知识点的运用以及ts中的模块

回顾和运用

/* 
综合运用+回顾

功能: 定义一个操作数据库的库,支持Mysql Mssql MongoDb

需求:功能一致 ,都有add update delete get 方法

要求:约束统一的规范以及代码复用

解决思路:需要约束规范 所以要定义接口,需要代码复用所以用到泛型
*/

interface DBI<T> {
    add(info: T): boolean;
    update(info: T, id: number): boolean;
    delete(id: number): boolean;
    get(id: number): any[];
}

//定义一个操作Mysql数据库的类, 要实现泛型接口,这个类应该是一个泛型类
class MysqlDb<T> implements DBI<T>{
    constructor(){
        console.log('建立连接')
    }
    add(info: T): boolean {
        console.log(info)//打印传入的user数据
        return true
    }
    update(info: T, id: number): boolean {
        console.log(info,id)//打印传入的user数据
        return true
    }
    delete(id: number): boolean {
        console.log(id)//打印传入的user数据
        return true
    }
    get(id: number): any[] {
        console.log(id)//打印传入的user数据
        return []
    }

}

// 再定义一个操作mssql数据库的类
class MssqlDb<T> implements DBI<T>{
    constructor(){
        console.log('建立连接')
    }
    add(info: T): boolean {
        return true
    }
    update(info: T, id: number): boolean {
        return true
    }
    delete(id: number): boolean {
        return true
    }
    get(id: number): any[] {
        return []
    }

}

// 操作用户表 定义一个User类和数据表做映射
class User{
    um:string|undefined;
    pwd:string|undefined;
}

var u = new User()
u.um = '张三'
u.pwd = '123456'

var oMysql = new MysqlDb<User>();
oMysql.add(u)

var oMssql = new MssqlDb<User>();
oMssql.add(u)
//在此基础之上 有了明确的约束,那么我们就可以不断地扩展相关功能

模块

官方:
1.TypeScript 1.5里面术语名已经改变,内部模块 现在称为命名空间,外部模块 则简称为模块 模块在其自身的作用域中执行,而不是在全局中执行。
2.定义在一个模块里面的变量,函数,类等等在模块外是不可见的,除非使用export形式等导出他们。相反,如果想在一个模块中使用其他模块导出的变量,函数,类,接口等等的时候,则必须导入它们,即import。

通俗理解:
我们可以一些公共的功能独立抽离成一个文件作为一个模块。
模块里面的变量,函数,类,接口等,默认是私有的,如果我们需要在外部访问模块的私有数据,那么我们可以通过export把模块中的数据暴露出来,在通过import引入模块就可以使用该模块里面暴露的数据了。

比如,新建一个DB.ts

var dburl = 'www.aaaaaa.com'

export function getData():any{
    console.log('获取数据库的数据')
    return [{title:'123'},{title:'234'}]
}

然后再index.ts中引入

// ts 中的 模块

import {getData} from './modules/db'
getData()

在node环境下运行index.ts,就可以看到打印出 ‘获取数据库的数据’

命名空间

// 命名空间
namespace A {
    interface Animal {
        name: string;
        eat(str: string): void;
    }

    export class Dog implements Animal {
        name: string;
        constructor(name: string) {
            this.name = name;
        }
        eat() {
            console.log(this.name + '吃肉')
        }
    }


    export class Cat implements Animal {
        name: string;
        constructor(name: string) {
            this.name = name
        }
        eat(food: string) {
            console.log(this.name + food)
        }
    }//在命名空间外部使用 需要使用export暴露出去
}
var d = new A.Dog('拉布拉多')
d.eat()


namespace B {
    interface Animal {
        name: string;
        eat(str: string): void;
    }

    export class Dog implements Animal {
        name: string;
        constructor(name: string) {
            this.name = name;
        }
        eat() {
            console.log(this.name + '吃肉')
        }
    }


    export class Cat implements Animal {
        name: string;
        constructor(name: string) {
            this.name = name
        }
        eat(food: string) {
            console.log(this.name + food)
        }
    }
}
var c = new B.Cat('折耳')

c.eat('猫粮')

// 如果需要把整个命名空间抽离出来到一个文件中,那么可以直接通过export暴露这个命名空间,在其他文件中引入就可以使用

下一篇文章 是基础篇最后一篇 记录一下装饰器的学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值