在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 相关文章推荐
将光标定位于输入框最右侧实现代码
Dec 04 Javascript
js实现的折叠导航示例
Nov 29 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
js实现图片漂浮效果的方法
Mar 02 Javascript
基于jQuery实现仿淘宝套餐选择插件
Mar 04 Javascript
简单谈谈Javascript中类型的判断
Oct 19 Javascript
jQuery对象的链式操作用法分析
May 10 Javascript
JS立即执行函数功能与用法分析
Jan 15 Javascript
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
Preload基础使用方法详解
Feb 03 Javascript
JS XMLHttpRequest原理与使用方法深入详解
Apr 30 Javascript
vue 页面回退mounted函数不执行的解决方案
Jul 26 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php多文件上传实现代码
2014/02/20 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
关于python多重赋值的小问题
2019/04/17 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
Django时区详解
2019/07/24 Python
如何写python的配置文件
2020/06/07 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
会计专业应届生求职信
2013/11/24 职场文书
财务会计实习报告体会
2013/12/20 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
办公室秘书自我鉴定
2014/01/18 职场文书
理财投资建议书
2014/03/12 职场文书
活动经费申请报告
2015/05/15 职场文书
安全生产隐患排查制度
2015/08/05 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
golang中的struct操作
2021/11/11 Golang