在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的public、private和privileged模式
Dec 28 Javascript
浅谈JavaScript编程语言的编码规范
Oct 21 Javascript
jquery ajax请求实例深入解析
Nov 26 Javascript
jquery Mobile入门—多页面切换示例学习
Jan 08 Javascript
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 Javascript
bootstrap改变按钮加载状态
Dec 01 Javascript
jQuery中find()方法用法实例
Jan 07 Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 Javascript
jQuery zclip插件实现跨浏览器复制功能
Nov 02 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
记一次用vue做的活动页的方法步骤
Apr 11 Javascript
canvas多重阴影发光效果实现
Apr 20 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隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
2015/10/09 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
JS中注入eval, Function等系统函数截获动态代码
2019/04/03 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
Python中自定义函数的教程
2015/04/27 Python
python实现读取命令行参数的方法
2015/05/22 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
python opencv之SIFT算法示例
2018/02/24 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
2014年六一儿童节演讲稿
2014/05/23 职场文书
城市创卫标语
2014/06/17 职场文书
经理岗位职责
2015/02/02 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
python缺失值填充方法示例代码
2022/12/24 Python