如何用TypeScript开发微信小程序

qw7719654 7年前
   <p>微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了。</p>    <p><strong>TypeScript:</strong></p>    <p>TypeScript 是C#之父Anders Hejlsberg的又一力作,相信喜欢C#语法的朋友们对TypeScript一定也会爱不释手。</p>    <p>简单的聊一聊TypeScript吧</p>    <ul>     <li>TS是一个应用程序级的JavaScript开发语言。</li>     <li>TS是JavaScript的超集,可以编译成纯JavaScript。</li>     <li>TS跨浏览器、跨操作系统、跨主机,开源。</li>     <li>TS始于JS,终于JS。遵循JavaScript的语法和语义,方便了无数的JavaScript开发者。</li>     <li>TS可以重用现有的JavaScript代码,调用流行的JavaScript库。</li>     <li>TS可以编译成简洁、简单的JavaScript代码,在任意浏览器、Node.js或任何兼容ES3的环境上运行。</li>     <li>TypeScript比JavaScript更具开发效率,包括:静态类型检查、基于符号的导航、语句自动完成、代码重构等。</li>     <li>TS提供了类、模块和接口,更易于构建组件。</li>    </ul>    <p>顺便说一句,TypeScript虽然只关心生成JavaScript之前的这些内容(意味着不关心生成出的JS代码的运行效率),但是根据鄙人的观察和比较,TypeScript所生成的JavaScript代码比绝大部分的前台开发自己写的JavaScript的代码质量高至少一个数量级!!</p>    <p><strong>TypeScript另一个优点:</strong></p>    <p>TypeScript在各大主流的IDE和编辑器里有智能提示!</p>    <p>重要的事情要说三遍!写TypeScript有智能提示!写TypeScript有智能提示!写TypeScript有智能提示!</p>    <p><strong>用TypeScript开发微信小程序</strong></p>    <p>扯了半天TypeScript,那么究竟怎么用TypeScript开发微信小程序呢?</p>    <p>非常简单,和微信官方的 JavaScript开发方式 没有太大区别,依旧是4个核心文件</p>    <ul>     <li>App:     代码整个应用程序的抽象对象,可以设置全局的方法和变量</li>     <li>Page:    页面抽象对象,承载页面业务逻辑</li>     <li>WXML:  页面的结构,相当于html </li>     <li>JSON:   配置文件</li>     <li>WXSS:  页面的样式,相当于css</li>    </ul>    <p>由于目前腾讯没有小程序的TypeScript版本的API,所以OneCode team针对目前腾讯放出的所有的小程序JavaScript API开发了一个TypeScript版本的API类型定义文件 <strong>wxAPI.d.ts</strong></p>    <p><strong>只需要在您的程序中引用该文件,如果是使用Visual Studio来开发的话,就能有代码提示了。</strong></p>    <p><img src="https://simg.open-open.com/show/3acb4644c35b9e20b4076f94e5e8c632.png"></p>    <p>下面是用TypeScript开发的Demo App的代码示例:</p>    <pre>  <code class="language-javascript">/// <reference path="./wxAPI.d.ts"/>    App({      onLaunch: function() {          //调用API从本地缓存中获取数据          let logs: any = wx.getStorageSync('logs');                    if (!Array.isArray(logs)) {              logs = [];          }          (<any[]>logs).unshift(Date.now());          wx.setStorageSync('logs', logs);      },      getUserInfo: function(cb: (param: any) => void) {          let that = this          if (this.globalData.userInfo) {              cb(this.globalData.userInfo)          } else {              //调用登录接口              wx.login({                  success: () => {                      wx.getUserInfo({                          success: (res) => {                              that.globalData.userInfo = res.userInfo;                              cb(that.globalData.userInfo);                          }                      });                  }              });          }      },      globalData: {          userInfo: null      }  });  </code></pre>    <p> </p>    <p>来自:http://www.cnblogs.com/onecodeonescript/p/6060862.html</p>    <p> </p>