Vue-cli3项目引入Typescript的实现方法


Posted in Javascript onOctober 18, 2019

前言

假设已经有一个通过 vue-cli3 脚手架构建的 vue 项目

命令行安装 Typescript

npm install --save-dev typescript
npm install --save-dev @vue/cli-plugin-typescript

编写 Typescript 配置

根目录下新建 tsconfig.json,下面为一份配置实例(点击查看所有配置项)。值得注意的是,默认情况下,ts 只负责静态检查,即使遇到了错误,也仅仅在编译时报错,并不会中断编译,最终还是会生成一份 js 文件。如果想要在报错时终止 js 文件的生成,可以在 tsconfig.json 中配置 noEmitOnError 为 true。

{
 "compilerOptions": {
  "target": "esnext",
  "module": "esnext",
  "strict": true,
  "importHelpers": true,
  "moduleResolution": "node",
  "experimentalDecorators": true,
  "esModuleInterop": true,
  "allowSyntheticDefaultImports": true,
  "sourceMap": true,
  "baseUrl": ".",
  "allowJs": false,
  "noEmit": true,
  "types": [
   "webpack-env"
  ],
  "paths": {
   "@/*": [
    "src/*"
   ]
  },
  "lib": [
   "esnext",
   "dom",
   "dom.iterable",
   "scripthost"
  ]
 },
 "exclude": [
  "node_modules"
 ]
}

新增 shims-vue.d.ts

根目录下新建 shims-vue.d.ts,让 ts 识别 *.vue 文件,文件内容如下

declare module '*.vue' {
 import Vue from 'vue'
 export default Vue
}

修改入口文件后缀

src/main.js => src/main.ts

改造 .vue 文件

.vue 中使用 ts 实例

// 加上 lang=ts 让webpack识别此段代码为 typescript
<script lang="ts">
 import Vue from 'vue'
 export default Vue.extend({
  // ...
 })
</script>

一些好用的插件

vue-class-component:强化 Vue 组件,使用 TypeScript装饰器 增强 Vue 组件,使得组件更加扁平化。点击查看更多

import Vue from 'vue'
import Component from 'vue-class-component'

// 表明此组件接受propMessage参数
@Component({
  props: {
    propMessage: String
  }
})
export default class App extends Vue {
  // 等价于 data() { return { msg: 'hello' } }
  msg = 'hello';
  
  // 等价于是 computed: { computedMsg() {} }
  get computedMsg() {
    return 'computed ' + this.msg
  }
  
  // 等价于 methods: { great() {} }
  great() {
    console.log(this.computedMsg())
  }
}

vue-property-decorator:在 vue-class-component 上增强更多的结合 Vue 特性的装饰。点击查看更多

import { Vue, Component, Prop, Watch, Emit } from 'vue-property-decorator'

@Component
export default class App extends Vue {
  @Prop(Number) readonly propA: Number | undefined
  @Prop({ type: String, default: ''}) readonly propB: String
  
  // 等价于 watch: { propA(val, oldval) { ... } }
  @Watch('propA')
  onPropAChanged(val: String, oldVal: String) {
    // ...
  }
  
  // 等价于 resetCount() { ... this.$emit('reset') }
  @Emit('reset')
  resetCount() {
    this.count = 0
  }
  
  // 等价于 returnValue() { this.$emit('return-value', 10, e) }
  @Emit()
  returnValue(e) {
    return 10
  }
  
  // 等价于 promise() { ... promise.then(value => this.$emit('promise', value)) }
  @Emit()
  promise() {
    return new Promise(resolve => {
      resolve(20)
    })
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 密码强弱度检测万能插件
Feb 25 Javascript
JavaScript 面向对象编程(1) 基础
May 18 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
jquery获取复选框被选中的值
Mar 22 Javascript
js 加密压缩出现bug解决方案
Nov 25 Javascript
BootStrap整体框架之基础布局组件
Dec 15 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
Dec 29 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
Jul 23 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
Mar 03 Javascript
webpack4.0打包优化策略整理小结
Mar 30 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
Aug 21 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 #Javascript
ElementUI之Message功能拓展详解
Oct 18 #Javascript
js实现简易计算器功能
Oct 18 #Javascript
JavaScript实现更换背景图片
Oct 18 #Javascript
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 #jQuery
CountUp.js数字滚动插件使用方法详解
Oct 17 #Javascript
CountUp.js实现数字滚动增值效果
Oct 17 #Javascript
You might like
php5 图片验证码实现代码
2009/12/11 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
PHP实现简单日历类编写
2020/08/28 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
JS从非数组对象转数组的方法小结
2018/03/26 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
django form和field具体方法和属性说明
2020/07/09 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
python如何调用php文件中的函数详解
2020/12/29 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
python实现图片转字符画
2021/02/19 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
教师的实习鉴定
2013/12/15 职场文书
社区戒毒工作方案
2014/06/04 职场文书