在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 动态加载脚本的4种方法
May 05 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
Mar 15 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
jquery实现叠层3D文字特效代码分享
Aug 21 Javascript
轻松掌握JavaScript单例模式
Aug 25 Javascript
JavaScript实现自动切换图片代码
Oct 11 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
Jun 08 Javascript
three.js加载obj模型的实例代码
Nov 10 Javascript
react 中父组件与子组件双向绑定问题
May 20 Javascript
Vue获取微博授权URL代码实例
Nov 04 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基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
PHP的PDO连接讲解
2019/01/24 PHP
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Django实现文件上传下载功能
2019/10/06 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
春节晚会主持词
2014/03/24 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
培训研修方案
2014/06/06 职场文书
关于运动会的口号
2014/06/07 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python