TypeScript Module
/*
moduel模式:模块可以帮助开发者将代码分割为可重用的单元,开发者可以自己决定将模块中的哪些资源(类,方法,变量)暴露出去供外部使用,哪些资源只在模块内使用
1.模块化,可重用
2.封装变量和函数
匿名函数和闭包是javascript最棒的特征之一
*/
一个模块就是一个文件,一个文件就是一个模块
一个模块既可以向外暴露自己的属性和方法,类,又可以导入其他模块导出的属性,方法,类
(function () {
//内部代码
}())
var a;//全局
function hello(){
var b;//局部的
}
(function ($,w) {
}(jQuery,window))
var myModuel = function (vip) {
//声明私有成员
var Yvip = document.getElementById(vip);
var YQ ='15844645';
return{
//公开成员,外部可以访问
add: function (t) {
if(t>=12){
var Yv = t;
Yvip.innerHTML='年费:'+Yv+"qq群:"+YQ;
}else
{
var Mv = t;
Yvip.innerHTML='月费:'+Mv;
}
}
}
}
var mm = myModuel("vip");
mm.add(20);
//一般形式
interface StringValidator{
isAcceptable(s:string):boolean;
}
var lettersRegexp = /^[a-zA-Z]+$]/
var numberRegexp = /^[0-9]+$]/
class letterOnlyValidator implements StringValidator{
isAcceptable(s:string):boolean{
return lettersRegexp.test(s);
}
}
class ZipCodeValidator implements StringValidator{
isAcceptable(s:string):boolean{
return s.length===5&&numberRegexp.test(s);
}
}
//现在仅有两个验证,可能还有很多,但是我们不可能去创建这么类去实现接口,可以使用TypeScript中的Moduel来实现
module Validator{
export interface StringValidator{
isAcceptable(s:string):boolean;
}
var lettersRegexp = /^[a-zA-Z]+$]/
var numberRegexp = /^[0-9]+$]/
class letterOnlyValidator implements StringValidator{
isAcceptable(s:string):boolean{
return lettersRegexp.test(s);
}
}
class ZipCodeValidator implements StringValidator{
isAcceptable(s:string):boolean{
return s.length===5&&numberRegexp.test(s);
}
}
}
//moduel的应用
//time.ts
module Time{
export class Test{
element:HTMLElement;
span:HTMLElement;
timer:number;
constructor(e:HTMLElement){
this.element = e;
this.element.innerHTML = '现在的时间是:';
this.span = document.createElement('span');
this.element.appendChild(this.span);
this.span.innerHTML = new Date().toTimeString();
}
start(){
this.timer = setInterval(()=>this.span.innerHTML = new Date().toTimeString());
}
stop(){
clearInterval(this.timer);
}
}
}
//jstime.js
var div = document.createElement('div');
document.body.appendChild(div);
var obj = new Time.Test(div);
var buttonStart = document.createElement('button');
document.body.appendChild(buttonStart);
buttonStart.innerHTML = '开始';
buttonStart.onclick = function () {
obj.start();
}
var buttonStop = document.createElement('button');
document.body.appendChild(buttonStop);
buttonStop.innerHTML = '结束';
buttonStop.onclick = function () {
obj.stop();
}
//index.html
<script type="text/javascript" src="BooleanDemo.js"></script>
<script type="text/javascript" src="jstimer.js"></script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
