TypeScript的模块
2020-10-12 本文已影响0人
浅忆_0810
与ES6
一样,TypeScript
也引入了模块化的概念,TypeScript
也可以使用ES6
中的export
、export default
和import
导出和引入模块类的数据,从而实现模块化
前后端的区别
-
require
:node
和es6
都支持的引入 -
export
和import
:ES6
支持的导出引入,在浏览器和node
中不支持,需要babel
转换,而且在node
中会被转换为exports
,但是在TypeScipt
中使用编译出来的JS
代码可以在node
中运行,因为会被编译为node
认识的exports
-
module.exports
和exports
:只有node
支持的导出
1. 导出
1.1 导出声明
任何声明(比如变量、函数、类、类型别名或接口)都能够通过添加export
关键字来导出
export interface StringValidator {
isAcceptable(s: string): boolean;
}
export const numberRegexp = /^[0-9]+$/;
export class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
1.2 导出语句
// 上面的语句可以直接通过导出语句来写
const numberRegexp = /^[0-9]+$/;
interface StringValidator {
isAcceptable(s: string): boolean;
}
class ZipCodeValidator implements StringValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export { ZipCodeValidator };
export { ZipCodeValidator as mainValidator }; // as能够改变导出变量的名字,在外部接收时使用
1.3 默认导出
每个模块都可以有一个default
导出,默认导出使用 default
关键字标记,并且一个模块只能够有一个default
导出。需要使用一种特殊的导入形式来导入 default
导出。通过export default
导出的值可以用任意变量进行接收
注:类和函数声明可以直接被标记为默认导出,标记为默认导出的类和函数的名字是可以省略的
// ZipCodeValidator.ts
export default class ZipCodeValidator {
static numberRegexp = /^[0-9]+$/;
isAcceptable(s: string) {
return s.length === 5 && ZipCodeValidator.numberRegexp.test(s);
}
}
import validator from "./ZipCodeValidator";
let myValidator = new validator();
export default
导出也可以是一个值
// OneTwoThree.ts
export default "123";
import num from "./OneTwoThree";
console.log(num); // "123"
1.4 导出模块
TypeScript
提供了export =
语法,export =
语法定义一个模块的导出对象
这里的
对象
一词指的是类、接口、命名空间、函数或枚举若使用
export =
导出一个模块,则必须使用TypeScript
的特定语法import module = require("module")
来导入此模块
// ZipCodeValidator.ts
let numberRegexp = /^[0-9]+$/;
class ZipCodeValidator {
isAcceptable(s: string) {
return s.length === 5 && numberRegexp.test(s);
}
}
export = ZipCodeValidator;
import zip = require("./ZipCodeValidator");
// Some samples to try
let strings = ["Hello", "98052", "101"];
// Validators to use
let validator = new zip();
// Show whether each string passed each validator
strings.forEach(s => {
console.log(`"${ s }" - ${ validator.isAcceptable(s) ? "matches" : "does not match" }`);
});
2. 导入
模块的导入操作与导出一样简单,可以使用以下 import
形式之一来导入其它模块中的导出内容
import { ZipCodeValidator } from "./ZipCodeValidator";
let myValidator = new ZipCodeValidator();
// 可以对导入内容重命名
import { ZipCodeValidator as ZCV } from "./ZipCodeValidator";
let myValidator = new ZCV();
// 将整个模块导入到一个变量,并通过它来访问模块的导出部分
import * as validator from "./ZipCodeValidator";
let myValidator = new validator.ZipCodeValidator();
当然,也可以直接使用import
导入一个不需要进行赋值的模板,该模板会自动进行内部的代码
import "./my-module.js";