文章目录
概念
把一些公共的功能单独抽离成一个文件作为一个模块。
模块里的变量、函数、类等默认是私有的,如果要在外部访问,需要通过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);