在Vue.js中使用TypeScript的方法


Posted in Javascript onMarch 19, 2020

虽然 vue2.x 对TypeScript的支持还不是非常完善,但是从今年即将到来的3.0版本在GitHub上的仓库 vue-next 看,为TS提供更好的官方支持应该也会是一个重要特性,那么,在迎接3.0之前,不妨先来看看目前版本二者的搭配食用方法吧~

创建项目

  • 虽然GitHub上有各种各样相关的Starter,但是使用 Vue CLI 应该是目前相对比较好的方式,在使用 vue create 创建新项目时,对 preset 选择 Manually select features 选项,之后添加 TypeScript
  • 如果想在vue应用中完整使用ES6中提供的类特性,那么在 class-style component syntax 处选择Y(本文主要介绍选择Y的情况)
  • 对于 Babel 来说,一般情况选择使用,而 linter / formatter 的具体选择可根据项目需求,此处不多说明

进入项目

创建完成后,看一看 package.json ,可以发现 vue-class-componentvue-property-decorator 以及其他ts相关的modules都已被添加,其中: vue-class-component 可以让你使用class-style语法创建组件,比如以下代码:

<template>
 <div>
 <button @click="decrement">-</button>
 {{ count }}
 <button @click="increment">+</button>
 </div>
</template>

<script lang="ts">
 import Vue from 'vue'
 import Component from 'vue-class-component'

 // Define the component in class-style
 @Component
 export default class Counter extends Vue {
 // Class properties will be component data
 count = 0

 // Methods will be component methods
 increment() {
  this.count++
 }

 decrement() {
  this.count--
 }
 }
</script>

vue-property-component 则完全依赖于前者,提供了除 @Component 外的其他几种装饰器,比如 @Prop

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

 @Component
 export default class YourComponent extends Vue {
 @Prop(Number) readonly propA: number | undefined
 @Prop({ default: 'default value' }) readonly propB!: string
 @Prop([String, Boolean]) readonly propC: string | boolean | undefined
}

再来一个二者结合的简单例子吧:

<template>
 <div class="hello">
 <h1>{{ msg }}</h1>
 <h1>{{ fullName }}</h1>
 <button @click="reverseStr()">Reverse</button>
 </div>
</template>

<script lang="ts">
import { Component, Prop, Vue, Watch } from 'vue-property-decorator';

@Component
export default class HelloWorld extends Vue {
 @Prop() private msg!: string;
 firstName = "rapt";
 lastName = "azure";

 mounted() {
 console.log('mounted');
 }

 // Computed property
 get fullName(): string {
 return this.firstName + this.lastName;
 }

 // Method
 reverseStr() {
 this.firstName = this.firstName.split('').reverse().join('');
 this.lastName = this.lastName.split('').reverse().join('');
 }

}
</script>
  • 此时,你的vue项目已经有fully-typed的可能了,当然也会有更好的自动补全以及错误提示。
  • 为了更好的确定类型,可以创建例如 interfaces 这样的文件夹,充分利用ts的接口和类来使项目有更好的组织结构,可读性和维护性。

另一种选择

其实当然也可以不使用class风格啦,这样的话,就和平时熟悉的vue更为相似了,而对类型当然也是完全支持的。
这里也提供一个简单的例子吧~<template>

<div class="hello">
  <h1>{{ msg }}</h1>
  <h1>{{ test }}</h1>
 </div>
</template>

<script lang="ts">
import Vue from 'vue';

export default Vue.extend({
 name: 'HelloWorld',
 props: {
  msg: String,
 },
 data() {
  return {
   test: "Hello from TS" as string
  }
 },
 methods: {
  pressMe(): string {
   return this.test + 'br'
  }
 }
});
</script>

其他的话

  • 本文只是简要探讨了在Vue.js中使用TypeScript的可能性,更多的相关内容在 官方文档 里可以找到哦,或者也可以多去Github的Vue区,TS区逛逛呢~
  • TypeScript的出现为JavaScript的生态带来了新活力,不管是前端三大框架Vue,React,Angular,还是Node系的后端框架比如Nest和Express,都在积极拥抱TS,希望以后整个生态会发展得越来越好吧~

总结

到此这篇关于在Vue.js中使用TypeScript的文章就介绍到这了,更多相关Vue.js使用TypeScript内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript面向对象编程
Mar 02 Javascript
JavaScript QueryString解析类代码
Jan 17 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
Dec 16 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
利用React-router+Webpack快速构建react程序
Oct 27 Javascript
懒加载实现的分页&amp;&amp;网站footer自适应
Dec 21 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
js实现鼠标点击飘爱心效果
Aug 19 Javascript
基于javascript实现移动端轮播图效果
Dec 21 Javascript
JS实现长图上下滚动效果
Mar 19 #Javascript
JavaScript实现简单计算器
Mar 19 #Javascript
jQuery实现颜色打字机的完整代码
Mar 19 #jQuery
webpack 动态批量加载文件的实现方法
Mar 19 #Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 #Javascript
js实现经典贪吃蛇小游戏
Mar 19 #Javascript
javascrpt密码强度校验函数详解
Mar 18 #Javascript
You might like
php和javascript之间变量的传递实现代码
2012/12/19 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
js 学习笔记(三)
2009/12/29 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
python mysqldb连接数据库
2009/03/16 Python
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
python编写弹球游戏的实现代码
2018/03/12 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
Python列表切片操作实例总结
2019/02/19 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
python实现LRU热点缓存及原理
2019/10/29 Python
Python原始套接字编程实例解析
2020/01/29 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
小学运动会表扬稿
2014/01/19 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
赡养老人协议书
2014/04/21 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript