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 相关文章推荐
js change,propertychange,input事件小议
Dec 20 Javascript
jquery 插件开发 extjs中的extend用法小结
Jan 04 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
Apr 02 Javascript
Javascript中判断对象是否为空
Jun 10 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
Aug 06 Javascript
有关Promises异步问题详解
Nov 13 Javascript
AngularJS中的包含详细介绍及实现示例
Jul 28 Javascript
浅谈jQuery中的checkbox问题
Aug 10 Javascript
AngularJS 模块化详解及实例代码
Sep 14 Javascript
jQuery给指定的table动态添加删除行的操作方法
Oct 12 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
vue.js单页面应用实例的简单实现
Apr 10 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
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
javascript Demo模态窗口
2009/12/06 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
python cookielib 登录人人网的实现代码
2012/12/19 Python
python处理圆角图片、圆形图片的例子
2014/04/25 Python
python实现的jpg格式图片修复代码
2015/04/21 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
python psutil模块使用方法解析
2019/08/01 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
C语言编程题
2015/03/09 面试题
招聘单位介绍信
2014/01/14 职场文书
货车司机岗位职责
2014/03/18 职场文书
教室布置标语
2014/06/26 职场文书
世界读书日的活动方案
2014/08/20 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
幼儿园国庆节活动总结
2015/03/23 职场文书
Python制作表白爱心合集
2022/01/22 Python
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL
Java实现简单小画板
2022/06/10 Java/Android