在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 相关文章推荐
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
Jan 22 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 Javascript
纯JS实现根据CSS的class选择DOM
Mar 22 Javascript
jQuery搜索子元素的方法
Feb 10 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
Javascript类型转换的规则实例解析
Feb 23 Javascript
jQuery表单对象属性过滤选择器实例详解
Sep 13 Javascript
js设置和获取自定义属性的方法
Oct 20 Javascript
JS 中document.write()的用法和清空的原因浅析
Dec 04 Javascript
深入理解ES6之数据解构的用法
Jan 13 Javascript
VUE 实现element upload上传图片到阿里云
Aug 12 Javascript
详解JavaScript中的this指向问题
Feb 05 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
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
用Python实现数据的透视表的方法
2018/11/16 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
医院总经理职责
2013/12/26 职场文书
小班下学期评语
2014/05/04 职场文书
商场租赁意向书
2014/07/30 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
六查六看六改心得体会
2014/10/14 职场文书
2014年审计工作总结
2014/11/17 职场文书
个人总结怎么写
2015/02/26 职场文书
销售员岗位职责范本
2015/04/11 职场文书
初一年级组工作总结
2015/08/12 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
讲解MySQL增删改操作
2022/05/06 MySQL