在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 相关文章推荐
限制文本字节数js代码
Mar 06 Javascript
JQuery 学习笔记 选择器之六
Jul 23 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
nuxt.js 缓存实践
Jun 25 Javascript
详解微信小程序开发用户授权登陆
Apr 24 Javascript
解决layer图标icon不加载的问题
Sep 04 Javascript
JS实现音量控制拖动
Jan 15 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
vue通过过滤器实现数据格式化
Jul 20 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
Nov 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
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
php生成HTML文件的类方法
2019/10/11 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
JsRender实用入门教程
2014/10/31 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
javascript基本数据类型和转换
2017/03/17 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python视频爬虫实现下载头条视频功能示例
2018/05/07 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
3种python调用其他脚本的方法
2020/01/06 Python
python处理写入数据代码讲解
2020/10/22 Python
HTML5的自定义属性data-*详细介绍和JS操作实例
2014/04/10 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
自荐信不宜过于夸大
2013/11/06 职场文书
会计职业生涯规划书
2014/01/13 职场文书
五年级科学教学反思
2014/02/05 职场文书
导师工作推荐信
2015/03/27 职场文书
劳动仲裁撤诉申请书
2015/05/18 职场文书
公司2015年终工作总结
2015/05/26 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
python标准库ElementTree处理xml
2022/05/20 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers