设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
我用TypeScript语言的七个月
返回列表
发新帖
我用TypeScript语言的七个月
[复制链接]
11
|
6
|
2014-2-19 11:55:14
|
显示全部楼层
|
阅读模式
本帖最后由 jieforest 于 2013-7-18 09:07 编辑
从2012年12月开始,我用 TypeScript 作为主要语言,用于一个大规模的企业项目。项目下个月要发布了,我想分享一些细节内容,包括我们团队怎么使用 TypeScript 的,还有成就项目的工作流程。
什么是TypeScript
TypeScript是由微软开发的一个能够在Node.js上运行的开源语言和编译器。这个语言是在ECMAScript6基础上演化并吸收了生成Javascript类别和接口的一些特性。Typescript 的编译器使用TypeScript语言编写,并且能够在任何兼容Javascript的程序内运行,同时它也是作为node.js的一个工具包发布的。所 以该语言最终生成的仍然是Javascript脚本。
评估
在2012年十一月期间,我们发现我们所选择的开发工具和对于Typescript的试用确实给团队带来很多便利。起初,我们试用了 Haxe,Dart,Coffescript等一系列语言,但是我们最终还是被拥有ECMAScript6特性Javascript编译 器:Tyepscript打动了。我们所期望的是使用Javascript作为开发语言但同时又想要在我们的开发过程中注入一定的结构框架,而且希望能够 依靠编辑器来进行一些纠错和验证。所以实际上我们最终还是只有在Javascript和Typescript之间作选择。在这基础上,团队作了几个小型的 项目雏形,并且迅速发现了以下一些有趣的特性:
验证:Typescript能够在编译的同时让我们验证一些代码在不同模块中的重复使用。在声明变量类型和定义 语句方法的时候,我们能够很有效的对所有call/get/set的使用在所有模块中进行交叉验证。如果一个属性被赋给了 bbox.controls.image类,那么在编译时只有图片实例或其子类才能够满足编译条件。
报错:Typescript编译器能够提供非常细节的报错,如果提供额外的类和接口信息,那报错的内容会更加的详细。
轻量化:Typescript的类和接口在编译时会蒸发的一干二净从而生成纯净的Javascript脚本。
ECMAS6(ES6):Typescript在ES6的基础上添加了类和接口。它让我们能够利用最新的Javascript语法规则去编写程序同时在编译时添加ES3,ES5的标签,使得其能够兼容ES3,ES5的标准。这让代码的整理变得非常轻松。
Build process:在我们最初的检验和测试过程中,有一个部分是利用Ant创建一个团队进程。通过对 环境的适当调试,开发者能够和SCM(架构部署)进行同步并且建立一个拥有所有代码组件(codepakages)的本地服务器用于开发和调试。整个创建 的过程迁入了LESS,RequireJS,Uglify2,TypeScript,模板处理和服务器的生成。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
本帖最后由 jieforest 于 2013-7-18 09:08 编辑
使用
在评估之后的几个月里,我们基于TypeScript建立了一个稳定的团队工作流程并且从中获利良多。进程的创建(buildprocess)是我们开发过程中一个至关重要并且每天都会使用到的一个过程。基于TypeScript,我们每天的工作流程基本上如下所述:
1. 从SCM进行更新
2. 运行‘antall’==>创建全部+运行本地服务器
3. 运行’antdev’或者’antts’==>增量式创建
4. 检校创建过程中的错误或者在浏览器中进行测试
5. 清理bug然后重复以上步骤
q1.png (34.82 KB, 下载次数: 5)
下载附件
2013-7-18 09:08 上传
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
我个人非常喜欢这样的运作模型,从中我发现我们花在浏览器测试阶段的时间远少于之前的JavaScript项目。由于Build过程中就已经检校了 一些接口/类型/语法的错误,因此在浏览器测试阶段我们就减少了对此类错误的勘误工作量。一旦所有人都熟悉了TypeScript的debugging流 程,我们大大的提高了工作效率,这是在以前的开发过程中所没有体验过的。花了5秒钟编译但是最终却删除了整一个没有运作的毫无意义类听起来有点不能接受。 这种防患于未然的debugging方式节省我们大约2个月的时间,而且代码的质量也大大提高了。
当初在我们进行开发的时候,TypeScript定义文件的质量和内容不是非常理想。定义文件能够让你非常安全的从外部定义JavaScript的接口类型,但这样做你的代码必须在编译时完全遵照定义文件。自从这个项目开始之际,我们借DefinitelyTyped项目为一些主要的或者非主要的JavaScript库编写润饰了180个定义。小组最后在创建进程时使用了关于Require,JQuery,Backbone,Bootstrap,Underscore和EaselJS的定义文件。现在为TypeScript添加定义文件,你只要在你的main.ts文件中添加一下的代码就可以了。
q2.png (31.89 KB, 下载次数: 1)
下载附件
2013-7-18 09:08 上传
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
根据同样的方法你也可以向TypeScript中添加一些外部库。某种程度上来说定义文件,接口和TypeScript的类的运作方式是类似的。为 了简化我们创建进程的过程,我们将这些调用过程全部综合到一个init.ts文件中,这样当编译器工作的时候就可以自动载入所有该应用所需要 TypeScript代码。哪怕是那些本需要通过先调用模块才能调用的类也能在这里被调用表达,这样这些类就会在编译时预先在外部生成一个模块文件以供使 用。注意这个外部模块的代码中”exportClass”的语法,它会告诉编译器将文件视为一个外部模块进行调用,而编译器标识”-moduleamd” 会使得编译器将模块编排成AMD或者CommonJS的格式
q3.png (37.77 KB, 下载次数: 4)
下载附件
2013-7-18 09:09 上传
除此之外,TypeScript还有另外一个很优雅整合代码的功能。每一个类和变量都被输出到浏览器窗口实体之外的一个路径里以供全局访问。我们使 用了bbox作为所有类和变量的命名空间,同时提供了输入时的支持,你也可以便捷的为你自己的应用建立一个良好命名空间。以上的模块包含在 了”bbox.controls”里并且在运行时可以发现它被输出到了bbox.controls,Bounds中。考虑到我们有用到大约60多个类,我 们最大化的使用了这个模块系统并且在开发过程中使用的非常顺利。你可以遵照这个方法自由的导出和类别化你自己的变量或者所有的类,而不需要让所有的变量都 归属于某个类。由于提供了类别和权限的限制,类别化输出的变量对于模块内单一的变量非常适用。随着类别和模块的介入,你使用JavaScript的方式也 会有所改变,并且很难形成比较差的实践方式。随着一个能够监测到通过数组或者一个很特殊的类别重写了某实体的高级编译器,你可以一不同的方式利用 JavaScript进行开发,TypeScript作为一种语言有着它独特的工作模式。它已经不完全是JavaScript了,但全包含了 JavaScript原有的所有特性。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
通过一系列的开发实践我发祥我自己已经通过对代码的重构实 现了开发策略的转换。由于有时需检查在不同部分受到修改影响的代码,我开始在有意识的改变变量类别,接口和命名空间等方面相信编译器本身的行为。在编译之后我才会修改结果,并且根据需要进行代码的重构。这在很多方面都使我能够很有效处理较大的代码量。编译器为我省去了很多debugging的负担。
q4.png (59.04 KB, 下载次数: 3)
下载附件
2013-7-19 08:49 上传
至于我的开发环境,尽管其他团对成员选择了Jetbrians,我依然选择了sublimetext2+TypeScirpt语法高亮。毫无异议,我发觉即使没有自动完成的功能,sublime依然能提供很好的TypeScript开发环境。由于TypeScript编译器本身就有着增量式的编译功 能和丰富的IDE整合功能,可能需要更多的时间来证明到底Sublime/Edge/Jetbrains哪一个才是最适合的开发工具。
最后,当我爱上使用TypeScript的同时(当然,我也会继续用下去),我发现了一个令人望而生畏的地方。有很多次,当你一头扎进编译环境中, 编译器却由于输入信息不可用而阻止你调用一个方法或者变量。每当这时,我们发现只有我们手动修复bug时,利用关联数组语法 (associativearraysyntax)去解决这个问题。比如:无论什么样的分类形 式,foo[‘myProperty’]foo[‘myMethod’]() 应该能够让你介入foo的myProperty和myMethod属性。这看起来有一些不可思议,但只要记住随时可能用到关联数组语法 (associativearraysyntax)就万事大吉了,你总有需要它的地方。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
最后附上一些项目开发过程中的总结数据:
1. 63个typescript类
2. 12个运行库(libs)(Underscore,Require,Bootstrap,Jquery,Backbone,EaselJS…)
3. 一次创建所有进程,用时8秒
4. 一次创建所有开发进程,用时5秒
5. 149Kb大小的运行库文件和411Kb大小的类文件
总结
在过去7个月里用TypeScript做开发是一件非常愉快的事情。在之前的开发经验里,我使用过ActionScript/ES4,但由于有着相 似的结构,我很快就适应了TypeScript,同时保持了JavaScript 优雅的代码便捷性。在很多方面,我发现对于TypeScript的使用,的确使我们在团队代码质量和截止日期上有了很大提升。我不认为我是微软的死忠,但 是TypeScript确实使我眼前一亮。它是过去三年里我所接触的最好的也是比较容易接受的一个网页开发的工具。我期待在未来能够在更多的项目中用到, 并且能够参与到该语言/编译器的开发中去。
回复
使用道具
举报
千问
|
2014-2-19 11:55:14
|
显示全部楼层
本帖最后由 jieforest 于 2013-7-19 08:51 编辑
over.
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
运动会口号,要押韵,不能抄,五三班的,好的再给10分
2
一段长为L,电阻为R的均匀电阻丝,把它拉制成3L长的均匀细丝后,切成等长的三段,然后把它们并联?
3
她会喜欢我吗??
4
现代当警察需要什么条件
5
中央8套播出的日剧
6
QQ三国为什么启动不到?
7
脸被火烧伤了,我 渴望爱情
8
请问专家:联通从组后有什么措施? 信息产业部怎样抑制移动一支独大?
9
1吨变压器油升高1度吸收的热能是多少 ?
10
用钢琴弹大象的脚步声
11
韩国蒸汽房戴像毛巾的帽子叫什么?哪里有卖的?
12
北京地质部的老干处在那?那电话多少?
13
跳槽的话集体户口怎么办
14
集合竞价成交后计入外盘还是内盘
15
升旗演讲稿,急求~
16
哪首歌的歌词是:谁亦在有天里终可找到替代品,内心那份爱却是仍属你……
17
孙俪出过哪几本书
18
粗暴易怒的人 如果他是你爸,你会如何面对?
19
主板BIOS问题(专业人员请进)
20
哪位知道怎样下载视频音乐到手机上?帮下忙吧!
21
经过染色体检查,结果14和21染色体易位,是否能回恢复,如何恢复呢?
22
波岛Q168手机键盘上锁,忘记密码怎样解?
23
5句双重否定句
24
魔兽世界的错误提示,怎么办啊?
25
碱式盐是怎么形成的?
26
水浒Q传道士和医生
27
ADIDAS狼牙5是什么鞋是篮球鞋吗?
28
0411-84643282是企业还是家庭电话?
29
六年级奥数
30
征求QQ空间的粉红色设计
31
QQ三国多少级可戴翅膀
32
钠放在水中产生?
33
丑女无敌第二部的视屏在哪里
34
一道数学题
35
在JAVA中用图形时,出现这样的问题怎么办?
36
宫颈中度炎症要物理治疗吗?
37
现在一个G的内存外频800是不是最高的呀
38
二次函数抛物线上升下降趋势是什么?
39
东方神起VS后街男孩 你喜欢哪一个?
40
会给婚姻留下阴影吗
41
数学问题!!!!!!急!!!!!!!
42
我真的再也受不起伤害!!!
43
W800C手机用的是什么系统
44
武汉中南浩沙办次卡多少钱
45
尹道贤的Love Letter 东方神起 下载
46
世界上天才人物毕竟是少数,否责他们就不会被叫天才 反驳
47
涩性胶皮的拉球方法
48
专家进 包皮垢 很多 又很丑很丑
49
我爸爸在打工的时候指头打断了,老板不赔钱怎么办?
50
电动车改36电机
51
我国历史上公元元年有什么历史事件发生?
52
优酷网的已播放怎么删除?
53
去香港的费用问题
54
请帮我翻译一下。
55
桥梁的形式
56
男朋友突然对我冷淡怎么办啊
57
photoshop这个软件还需要办卡交钱才能用吗?
58
在百度上怎么能查到自己上传的相片
59
请问信用卡不用了怎么注销?
60
Should my baby ___(tie)his shoes .Look your baby_____(tie)his shoes.
61
如何使鼻子变大
62
3000元一套台球桌和球杆还有球,能下来吗?(开店)
63
教育 重要不重要? 如果重要,那是为什么?
64
中国远洋 (601919)的宏观分析 行业分析 公司分析 估值分析
65
熬姜汤的时候可以加葱吗
66
我想问一下,考会计证的时间跟自考时间是不是同一天呢?
67
我该怎么办
68
蚌埠市有傣妹火锅吗
69
73格机主题不能安装
70
那个网站可以看韩国SBS和MBC
71
某人在阳台以30m/s速度竖直上抛石块,石块运动到离抛出点25m经历时间为?
72
用含盐20%的盐水30千克和含盐75%的盐水40千克混合在一起,这时盐水的含盐率是多少?
73
求一份文学社章程
74
汽车载着木箱静止在地面上。
75
闵行区颛桥镇颛盛路一洗黑专卖店
76
已知函数y=2x+b和函数y=3kx-6的图象的交点是(6,3),则b+k=?
77
介绍一些好听的跑跑视频背景音乐
78
跪求戴乐民的《红花舵主》
79
CPU隔热胶怎么用 一次用多少
80
帮我 鉴定一下 我的模拟城市4的 具体版本?
81
我可不可以用在北京的住房公积金在湖北襄樊买房呀?用住房公积金贷款一般有哪些程序呀?要到哪个银行办理呀?
82
如何不进入系统备份注册表
83
加权平均数
84
今天,第一次在晚上被人追。
85
有没有哪位好心人帮我找找小品的剧本阿!!主题是 迎接世博,提升素养
86
苹果机如何中止运行中程序
87
昂达A78GT主板(板载128MB显存)问题
88
荒村客栈主题曲对不起我爱你
89
求一篇关于鸟巢存在的问题的看法的论文!
90
我想配制一台能玩使命召唤四非常顺畅的运行的电脑,请问那些配件要什么样和价格,谢谢!
91
周杰伦,周讯,赵文卓主演的《苏乞儿》什么时候上演
92
有谁知道945P的主板支持至强3050的CPU吗?
93
包含科学道理的谚语
94
我昨天被拒绝了,怎么办?
95
qq三国挣钱秘诀
96
关于眼压的问题
97
室内设计师考察酒店报告如何写
98
我是属猴的,09年运势怎么样,谁来给我说说
99
郑州那里有高仿鞋
100
用两个圆、两个三角形和一组平行线画出一幅图,并加上注解。