Vue2 Vue-cli中使用Typescript的配置详解


Posted in Javascript onJuly 24, 2017

前言

因为最近公司的团队热衷于vue框架,新项目想着练练typescript,于是开始了vue+ts的踩坑之路...本文意在为和我有一样想法的伙伴们省去踩坑的时间,下面话不多说了,来一起看看关于Vue2 Vue-cli中利用Typescript需要的配置是什么吧。

一、初步配置

首先安装官方插件vue-class-component,vue-property-decorator,配置webpack。
webpack配置如下:

修改入口文件

entry: {
 app: './src/main.ts'
}

resolve部分:

extensions: ['.js', '.vue', '.json', '.ts', '.tsx']

配置loader

{
 test: /\.tsx?$/,
 loader: 'ts-loader',
 exclude: /node_modules/,
 options: {
  appendTsSuffixTo: [/\.vue$/],
 }
 }

配置tsconfig.json

{
 "include": [
 "src/**/*"
 ],
 "exclude": [
 "node_modules"
 ],
 "compilerOptions": {
 "allowSyntheticDefaultImports": true,
 "experimentalDecorators": true,
 "allowJs": true,
 "module": "es2015",
 "target": "es5",
 "moduleResolution": "node",
 "experimentalDecorators": true,
 "isolatedModules": true,
 "lib": [
  "dom",
  "es5",
  "es2015.promise"
 ],
 "sourceMap": true,
 "pretty": true
 }
}

二、实战!

配好配置只是第一步,在项目里跑起来才是王道。

在vue文件的script标签里添加lang='ts'

因为ts-loader不像配过loader的webpack一样知道vue,html等文件是什么东西,你跑起来后会报模块无法解析的错误,所以还需要配置.d.ts声明文件

vue的如下配置

declare module "*.vue" {
 import Vue from 'vue';
 export default Vue;
}

你也可以为其它的非js模块配置.d.ts文件如html(告诉ts-loader把html理解成字符串)

declare module "*.html" {
 let template: string;
 export default template;
}

配置好之后ts就能理解这些模块了

从vue-property-decorator引入需要用到的模块

(一般只用到Component, Vue, Watch, Prop这四个,其它3个没用到也没研究,知道的大佬可以解释下。)

import { Component, Vue, Watch } from 'vue-property-decorator'

这里拿之前写的sidbar的代码当个栗子:

class HoverTopElem {
 leaveTop: number = -200
 top: number = null
 height: number = null

 show(e) {
 this.top = e.target.getBoundingClientRect().top
 this.height = e.target.clientHeight
 }
 hidden() {
 this.top = this.leaveTop
 }
}

@Component({
 name: 'sidebar',
 template: template,
 components: {
 sidebarItem
 }
})
export default class Sidebar extends Vue {
 SidebarMenu: any = SidebarMenu
 hoverTopElem: HoverTopElem = new HoverTopElem()
 activeListItemName: string = null
 activeRouteItemRoute: string = null

 get _activeRouteItemRoute(): string {
 return this.$route.path
 }

 @Watch('_activeRouteItemRoute', { immediate: true })
 onRouteChanged(val: any) {
 this.activeRouteItemRoute = val
 }

 changeList(param) {
 this.activeListItemName = param
 }

 changeRoute(param) {
 this.activeRouteItemRoute = param
 }
}

元数据写在@Component配置里,像名字,用到的组件啥的,然后说下之前vue里用到的各个实例属性方法在这里怎么用:

data: 这个是最常用的,像上面的SidebarMenu(这里一共声明了4个),注意这里声明的变量一定要赋一个值,没有就null,不能是undefined,不然这个数据就不是响应的。因此HoverTopElem类里的属性也是要有初始值,不然这些属性也不是响应的

computed: 这里就是get函数,注意tsconfig.jsonp不配置"target": "es5"这里会报错

prop: vue-property-decorator里面有Prop模块,也可以在元数据声明这个prop,然后在类里声明一下这个变量就可以了,个人推荐第一种

watch: vue-property-decorator里的Watch模块

methods: 方法像data一样直接写在类里就可以了(注意不要和周期钩子同名)

各种生命周期钩子: 直接写就行

路由钩子见vue-class-component文档

至此,基本就可以像原来一样写vue组件了。

当然如果要想和原来一样写ts,还需要配置tslint,不然一些ts语法不会被识别,像public修饰符之类的,因为ts还不是很熟练就没想着配,有兴趣的朋友可以试试。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery图片预加载 等比缩放实现代码
Oct 04 Javascript
JS实现图片预加载无需等待
Dec 21 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
js动态修改表格行colspan列跨度的方法
Mar 30 Javascript
js实现固定显示区域内自动缩放图片的方法
Jul 18 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
Oct 05 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
让网站自动生成章节目录索引的多个js代码
Jan 07 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
p5.js临摹旋转爱心
Oct 23 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 #Javascript
JavaScript对JSON数据进行排序和搜索
Jul 24 #Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
Jul 24 #Javascript
深入理解React Native原生模块与JS模块通信的几种方式
Jul 24 #Javascript
浅析JavaScript中的平稳退化(graceful degradation)
Jul 24 #Javascript
vue.js移动端app实战1:初始配置详解
Jul 24 #Javascript
React 子组件向父组件传值的方法
Jul 24 #Javascript
You might like
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
js面向对象编程总结
2017/02/16 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python代码的打包与发布详解
2014/07/30 Python
Python max内置函数详细介绍
2016/11/17 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
python async with和async for的使用
2019/06/20 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
会计主管岗位职责范文
2013/11/08 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
个性与发展自我评价
2014/02/11 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书