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 相关文章推荐
基于jquery打造的百分比动态色彩条插件
Sep 19 Javascript
javascript处理表单示例(javascript提交表单)
Apr 28 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
js变量提升深入理解
Sep 16 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
浅析vue component 组件使用
Mar 06 Javascript
vue.js 上传图片实例代码
Jun 22 Javascript
javascript 缓冲运动框架的实现
Sep 29 Javascript
vue element中axios下载文件(后端Python)
May 10 Javascript
JavaScript实现抖音罗盘时钟
Oct 11 Javascript
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
细述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
学习php分页代码实例
2013/10/24 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
理解Javascript_05_原型继承原理
2010/10/13 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
正则验证小数点后面只能有两位数的方法
2017/02/28 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
Django框架多表查询实例分析
2018/07/04 Python
python实现可逆简单的加密算法
2019/03/22 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
机械专业毕业生自荐信
2013/11/02 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
学习计划书怎么写
2014/09/15 职场文书
高中校园广播稿
2014/10/21 职场文书
雷锋之歌观后感
2015/06/10 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript