游览器无法解析模块,如要运行代码,需要命令行进入当前项目:输入node index.js
方可运行代码。
模块的概念
模块的的概念(官方):
关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。
“外部模块”现在则简称为“模块” 模块在其自身的作用域里执行,而不是在全局作用域里;
这意味着定义在一个模块里的变量,函数,类等等在模块外部是不可见的,除非你明确地使用export形式之一导出它们。
相反,如果想使用其它模块导出的变量,函数,类,接口等的时候,你必须要导入它们,可以使用 import形式之一。
模块的概念(自己理解):
我们可以把一些公共的功能单独抽离成一个文件作为一个模块。
模块里面的变量 函数 类等默认是私有的,如果我们要在外部访问模块里面的数据(变量、函数、类),
我们需要通过export暴露模块里面的数据(变量、函数、类...)。
暴露后我们通过 import 引入模块就可以使用模块里面暴露的数据(变量、函数、类...)。
export导出:
1. 首先新建一个moudles文件夹
2. 往里面新建一个db.ts文件,往里面写入
- 暴露方法01:
export var dbUrl = "xxxxxx";
export function getData01(): any[] {
console.log("获取数据库的数据111");
return [1, 1, 1];
}
export function save(): void {
console.log("保存数据成功");
}
- 暴露方法02:
var dbUrl = "xxxxxx";
function getData(): any[] {
console.log("获取数据库的数据111");
return [1, 1, 1];
}
function save(): void {
console.log("保存数据成功");
}
export {
dbUrl, getData, save };
3. 在外部的index.ts引入模块
- 不起别名
import {
getData, save, dbUrl } from "./moudles/db";
getData();
save();
console.log(dbUrl);
- 起别名(as关键字)
import {
getData as g, save as s, dbUrl as d } from "./moudles/db";
g();
s();
console.log(d);
export default 默认导出
export default 默认导出(不可以导出变量)
每个模块都可以有一个default导出。 默认导出使用 default关键字标记;
并且一个模块只能够有一个default导出。
需要使用一种特殊的导入形式来导入 default导出。
不可以起别,不可以加{}
示例:
db.ts
var dbUrl = "xxxxxx";
export default function getData(): any[] {
console.log("获取数据库的数据111");
return [1, 1, 1];
}
function save(): void {
console.log("保存数据成功");
}
index.ts
import getData from "./moudles/db";
getData();
模块化封装DB库
- 创建一个moudles文件,往里面创建db.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数据库的类 注意:要实现泛型接口 这个类也应该是一个泛型类
class MysqlDb<T> implements DBI<T> {
add(info: T): boolean {
throw new Error("Method not implemented.");
}
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[] {
throw new Error("Method not implemented.");
}
}
//定义一个操作mssql数据库的类
class MsSqlDb<T> implements DBI<T> {
add(info: T): boolean {
throw new Error("Method not implemented.");
}
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[] {
throw new Error("Method not implemented.");
}
}
export {
MysqlDb, MsSqlDb };
- 创建model文件夹,创建user.ts,往里面写入:
import {
MsSqlDb } from "../moudles/db";
//定义数据库的映射
class UserClass {
username: string | undefined;
password: string | undefined;
}
var UserModel = new MsSqlDb<UserClass>();
export {
UserClass, UserModel };
- 在最外面的index.ts写入:
import {
UserClass, UserModel } from "./model/user";
// 创建数据
var user = new UserClass();
user.username = "张三";
user.password = "12345655654757";
// 添加数据
UserModel.add(user);
// 获取数据
UserModel.get(12345655654757);