9.模块

本文详细介绍了 TypeScript 中的模块导入与导出机制,包括逐一导出、统一导出和默认导出的方式,并提供了实际案例。通过模块化管理,可以更好地组织和复用代码,例如在 `user.ts` 和 `article.ts` 中分别导入 `db.ts` 中的数据库操作类,实现用户和文章数据的增删查改。此外,还展示了如何在导入时进行重命名,确保代码的清晰性和可读性。
摘要由CSDN通过智能技术生成

概念

把一些公共的功能单独抽离成一个文件作为一个模块。

模块里的变量、函数、类等默认是私有的,如果要在外部访问,需要通过export暴露模块里面的数据,然后外部文件通过import引入模块就可以使用模块里的数据。

模块的基础:导入导出

方式1:一个个导出

导出

export let dbUrl = '暴露数据';

export function getData():any {
    console.log('暴露方法: ');
}

export function save() {
    console.log('我是save方法');
}

导入

import { dbUrl, getData, save } from './modules/db'
console.log('dbUrl: ', dbUrl);
getData()

方式2:统一导出

导出

let dbUrl = '暴露数据';

export function getData():any {
    console.log('暴露方法: ');
}

function save() {
    console.log('我是save方法');
}

export {dbUrl, getData, save}

导入

import { dbUrl, getData, save } from './modules/db'
console.log('dbUrl: ', dbUrl);
getData()

方式3: 默认导出(export defult)

一个模块只能有一个default导出。 需要使用特殊的导入形式

导出

let dbUrl = '暴露数据';

function getData():any[] {
    console.log('暴露方法: ');
}

function save() {
    console.log('我是save方法');
}

export default getData;

导入

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

其他技巧

导入后重命名

import { dbUrl, getData as get, save } from './modules/db'
get()

注:import在浏览器中无法直接执行,需要借助webpack,测试时可以在vs code编译后这样执行$ node index.js

案例

使用模块重新处理操作数据库的底层库,参考mongodb的封装方法

目录

modules
	db.ts
model
	user.ts
	article.ts
index.html
index.ts

db.ts

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

// 定义一个mysql数据库的类
export class MysqlDb<T> implements DBI<T>{
    add(info: T): boolean {
        console.log('info: ', info);
        return true;
    }
    update(info: T, id: number): boolean {
        throw new Error("Method not implemented.");
    }
    delete(id: number): boolean {
        throw new Error("Method not implemented.");
    }
    get(id: number): any[] {
        let list = [{title: 'xxx'}]
        return list
    }
}

// 定义一个操作Mssql数据库的类
export class MsSqlDb<T> implements DBI<T>{
    add(info: T): boolean {
        console.log('info: ', info);
        return true;
    }
    update(info: T, id: number): boolean {
        throw new Error("Method not implemented.");
    }
    delete(id: number): boolean {
        throw new Error("Method not implemented.");
    }
    get(id: number): any[] {
        let list = [{title: 'xxx'}]
        return list
    }
}

user.ts

import { MysqlDb } from '../modules/db'

// 定义数据库的映射
class UserClass{
    username: string | undefined;
    password: string | undefined;
}

let UserModel = new MysqlDb<UserClass>()

export {
    UserClass,
    UserModel
}

article.ts

import { MysqlDb } from '../modules/db'

// 定义数据库的映射
class UserClass{
    username: string | undefined;
    password: string | undefined;
}

let UserModel = new MysqlDb<UserClass>()

export {
    UserClass,
    UserModel
}

index.ts

import { UserClass, UserModel } from './model/user'
import { ArticleClass, ArticleModel } from './model/article'

/* 操作用户表 */
let u = new UserClass()
u.username = '张三2'
u.password = '1234'
UserModel.add(u);
let ulist = UserModel.get(1)
console.log('ulist: ', ulist);

/* 操作文章表 */
let alist = ArticleModel.get(1);
console.log('alist: ', alist);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值