TypeScript Error TS2304: Cannot find name ‘Set’、’Promise’、’Map’.解决方法

最近在研究ionic framework,希望使用hybrid app开发我们团队的新版app报表模块。

在使用命令:

ionic serve

启动应用的时候,发现www/build目录下没有app.bundle.js这个文件,这个文件是typescript编译之后生成的一个js文件。看了命令行启动日志,发现有大量的typescript编译报错,以下就展示部分典型报错信息:

TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/directives/ng_class.d.ts(81,35): Error TS2304: Cannot find name 'Set'.
TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/facade/async.d.ts(34,33): Error TS2304: Cannot find name 'Promise'.
TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/facade/lang.d.ts(11,17): Error TS2304: Cannot find name 'Map'.

经过stackoverflow和github的指点,我找到的解决方法如下:
先安装angular2依赖,–save-dev目的是把angular2依赖写入到package.json里:

npm install angular2 --save-dev

然后在项目的app目录下找到app.ts文件,在文件顶部加上:

///<reference path="../node_modules/angular2/typings/browser.d.ts"/>

这样之后就解决了typescript报错的问题。

执行MySQL使用事务的方法

最近我团队出现了一个挺让我头疼的问题,由于我们的开发没来得及抽出时间来开发功能,一些紧急的需求过来了,我们团队的同学只能使用SQL语句来暂时帮助业务方将问题解决。然而有些需求却需要执行很多的SQL语句来解决,这样存在很大的风险,一不小心一个SQL写错了,就会对业务方造成很大的影响。所以我提出了几个改进的建议:
 1. 尽量不使用SQL语句,团队需要从原来的工作中总结经验,将功能提炼出来,通过系统功能来解决问题。这个建议是需要提前埋伏一些功能,对未来做一些预判,而且要做到能够快速开发功能来应对业务方紧急的需求。
2. 如果一定要执行SQL语句,执行前需要有人check,结对编程,写的同学需要在check的同学面前把逻辑讲清楚。另外,为了保险起见,在执行SQL的时候必须要使用事务,执行完之后check,如果没问题就commit,否则就rollback:
set autocommit = 0;  # 先设置不允许自动提交 
# 执行你的SQL
commit;  # 如果没问题就commit
rollback;  # 如果有问题就rollback
set autocommit = 1;  # 设置回允许自动提交,因为MySQL是默认自动提交的
注:如果很不幸在执行之后没有做commit或者rollback的处理,你的MySQL客户端退出之后MySQL会自动将你执行的SQL rollback回去。