TypeScript是JavaScript的静态语言超集,配合上工具可以让我们在编译前,就发现程序中的错误。严格的语法校验可以控制代码质量,特别适合在大型、研发周期长、多人协作的项目中使用。可以有减少程序代码熵值的扩大速度。

##TypeScript的环境搭建 这里Vue在2.5以后的版本中,在Vue-Cli中集成了拥有Typescript环境的项目模版,可以直接生成,开箱即用还是很方便的。

关于Typescript的依赖库介绍

vue-class-component

vue-class-componet使得我们用上更优雅的语法创建一个Vue的组件。它的风格类似React的Mobx框架使用的@修饰符。

``
// 项目中用vue-class-component实现的LeftNav组件

import  Component  from  'vue-class-component'
import  Vue  from  'vue'
@Component({
  props: {
    userInfo:  Object
    }
 })
 export  default  class  LeftNav  extends  Vue{
   go (path) {
     this.$router.push({path})
   }
   get  hasStoreManage() {
     return
       this['userInfo'].hasStoreManageAuthority
     }
   get  hasUsedCarManage() {
     return  this['userInfo'].hasUsedCarAuthority
     }
 } `` 围绕着**vue-class-component** 有许多的其他用于vue和Typescript项目中的库,像是**vue-property-decorator** 和我们下面要介绍的**vuex-class**。它们的实现都是基于**vue-class-compoent**中的自定义修饰器语法来实现的,感兴趣的同学可以去github翻翻它们的源码,内容也并不多,自己来写一套用于Vue的修饰器是不是很酷呢。

vuex-class

vuex-class 是我们为了更好的搭配vuex在项目中使用的一个依赖工具。在使用到Typescript语法的时候,原来项目中使用的注入Action、和getter的mapAction、mapGetter这样的方法已经不在试用了。甚至会产生报错。Vuex-class就是解决这个层面的问题的。它提供给我们“@Action、@Getter、@State”等方法来帮我们注入Vuex中的状态和方法 `` 在carDetail中使用的Vuex-class

import  Vue  from  'vue'
import  Component  from  'vue-class-component'
import  container  from '../../components/container.vue'
import { Action, Getter } from  'vuex-class'
@Component({
	components: {
	   container
   }
 })
 export  default  class  carDetail  extends  Vue {
 @Action('getEnquiryCarDetail') getCarDetail
 @Getter('enquiryCarDetail') carDetail
 ``

Typescript中的接口

在本次项目中,我们使用接口的场景是有限的。只有在实现Rest对象和Vuex中使用Interface。其实在React的项目中,Typescript的interface属性很多时候,应用在component的定义中。 在后端的世界利接口是构建大项目时,对结构解耦的重要特性,在前端的世界里接口主要还是应用在component的定义中。

项目中的开发体验

使用Typescript中的接口,在我们使用其他引入近来的模块和方法的时候,可以得到很完整的语法提示。 Typescript也强制着你去声明和定义使用的props, state的结构和类型。在我们编写组件的时候这点格外的重要,他的规范,节省了我们使用和理解组件的时间。很适合多人的分工协作。 而对于结构的声明,则在前端层面上避免了,访问较长路径时(this.props.detail.userinfo.name)可能会出现的错误,让我们的项目更加的安全。他在一定层面上限制了我们去犯一些低级的语法错误。

在Vuex层面,可以使用Vuex提供的types来声明和定义Vuex中的各类getters、actions等。这样在程序不符合期望的结构的时候,我们可以在代码编译前就知晓错误。

但是对于它的规范的理解还是需要成本的。像是一些Vue对象全局的混入和方法,Typescript可能无法识别它的结构,造成出错。 而且在引入Typescript也会增加你一定的代码量,因为你的一些声明的工作和代码变多。这个也无可厚非。

项目总结

Typescript还是有它适用的场景的,想我们前面所说的那样,当我们的项目结构比较复杂、参与人数较多、开发周期长的时候,我们可以用Typescript来管理我们的代码质量。 但是在项目中使用Typescript的意义就不大了,反而带来了很多的限制。