1、使用官方脚手架构建

新的 VueCLI工具允许开发者 使用 TypeScript 集成环境 创建新项目。

只需运行 vue createmy-app。

然后,命令行会要求选择预设。使用箭头键选择 Manuallyselectfeatures。

接下来,只需确保选择了 TypeScript和 Babel选项,如下图:

完成此操作后,它会询问你是否要使用 class-style component syntax。

然后配置其余设置,使其看起来如下图所示。

Vue CLI工具现在将安装所有依赖项并设置项目。

接下来就跑项目啦。

总之,先跑起来再说。

2、项目目录解析

通过 tree指令查看目录结构后可发现其结构和正常构建的大有不同。

这里主要关注 shims-tsx.d.ts和 shims-vue.d.ts两个文件

两句话概括:

  • shims-tsx.d.ts,允许你以 .tsx结尾的文件,在 Vue项目中编写 jsx代码

  • shims-vue.d.ts 主要用于 TypeScript 识别 .vue 文件, Ts默认并不支持导入 vue 文件,这个文件告诉 ts导入 .vue 文件都按 VueConstructor<Vue>处理。

此时我们打开亲切的 src/components/HelloWorld.vue,将会发现写法已大有不同

至此,准备开启新的篇章 TypeScript极速入门 和 vue-property-decorator

3. Vue组件的 Ts写法

从 vue2.5 之后,vue 对 ts 有更好的支持。根据官方文档,vue 结合 typescript ,有两种书写方式

Vue.extend

vue-class-component

理想情况下, Vue.extend 的书写方式,是学习成本最低的。在现有写法的基础上,几乎 0 成本的迁移。

但是 Vue.extend模式,需要与 mixins 结合使用。在 mixin 中定义的方法,不会被 typescript 识别到

,这就意味着会出现丢失代码提示、类型检查、编译报错等问题。

菜鸟才做选择,大佬都挑最好的。直接讲第二种吧:

4.1 vue-class-component

我们回到 src/components/HelloWorld.vue

有写过 python的同学应该会发现似曾相识:

  • vue-property-decorator这个官方支持的库里,提供了函数 装饰器(修饰符)语法

1. 函数修饰符 @

“@”,与其说是修饰函数倒不如说是引用、调用它修饰的函数。

或者用句大白话描述: @: "下面的被我包围了。"

举个栗子,下面的一段代码,里面两个函数,没有被调用,也会有输出结果:

直接运行,输出结果:

上面代码可以看出来:

  • 只定义了两个函数: test和 func,没有调用它们。

  • 如果没有“@test”,运行应该是没有任何输出的。

但是,解释器读到函数修饰符“@”的时候,后面步骤会是这样:

1、去调用 test函数, test函数的入口参数就是那个叫“ func”的函数;

2、test函数被执行,入口参数的(也就是 func函数)会被调用(执行);

换言之,修饰符带的那个函数的入口参数,就是下面的那个整个的函数。有点儿类似 JavaScript里面的 functiona(function(){...}); 

2. vue-property-decorator和 vuex-class提供的装饰器

vue-property-decorator的装饰器:

  • @Prop

  • @PropSync

  • @Provide

  • @Model

  • @Watch

  • @Inject

  • @Provide

  • @Emit

  • @Component (provided by vue-class-component)

  • Mixins (the helper function named mixins provided by vue-class-component)

vuex-class的装饰器:

  • @State

  • @Getter

  • @Action

  • @Mutation

我们拿原始Vue组件模版来看:

以上模版替换成修饰符写法则是:

正如你所看到的,我们在生命周期 列表那都添加 privateXXXX方法,因为这不应该公开给其他组件。

而不对 method做私有约束的原因是,可能会用到 @Emit来向父组件传递信息。

4.2 添加全局工具

引入全局模块,需要改 main.ts:

npm iVueI18n

但仅仅这样,还不够。你需要动 src/vue-shim.d.ts:

之后使用 this.$i18n()的话就不会报错了。

4.3 Axios 使用与封装

1. 新建文件 request.ts

文件目录:

2. request.ts文件解析

为了方便,我们还需要定义一套固定的 axios 返回的格式,新建 ajax.ts:

3. main.ts接口调用:

4、编写一个组件

为了减少时间,我们来替换掉 src/components/HelloWorld.vue,做一个博客帖子组件:

然后在 Home.vue中使用:

这时候运行项目

这就是简单的父子组件

5、参考文章

TypeScript — JavaScript with superpowers — Part II

VUE WITH TYPESCRIPT

TypeScript + 大型项目实战

Python修饰符 (一)—— 函数修饰符 “@”

Typescript 中的 interface 和 type到底有什么区别

【vue&ts开发】Vue 3.0前的 TypeScript 最佳入门实践的更多相关文章

  1. 【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践

    前言 我个人对更严格类型限制没有积极的看法,毕竟各类转类型的骚写法写习惯了. 然鹅最近的一个项目中,是 TypeScript+ Vue,毛计喇,学之...-真香! 1. 使用官方脚手架构建 npm i ...

  2. 0.Python 爬虫之Scrapy入门实践指南(Scrapy基础知识)

    目录 0.0.Scrapy基础 0.1.Scrapy 框架图 0.2.Scrapy主要包括了以下组件: 0.3.Scrapy简单示例如下: 0.4.Scrapy运行流程如下: 0.5.还有什么? 0. ...

  3. 每天一点点之vue框架开发 - vue坑-This relative module was not found

    94% asset optimization ERROR Failed to compile with 1 errors This relative module was not found: * . ...

  4. 【译】Optaplanner开发手册本地化: (0) - 前言及概念

    在此之前,针对APS写了一些理论性的文章:而对于Optaplanner也写了一些介绍性质,几少量入门级的帮助初学者走近Optaplanner.在此以后,老农将会按照Optaplanner官方的用户手册 ...

  5. 每天一点点之vue框架开发 - vue坑-input 的checked渲染问题

    选中radio或者checkbox需要注意的是: 不管<input type='radio checked='true''>  你的checked属性值是true或者false,他都会选中 ...

  6. 每天一点点之vue框架开发 - vue中使用vue-router切换页面时自动滚动到顶部的方法

    1. 在main.js入口文件中写入 //路由跳转后,页面回到顶部 router.afterEach(() => { document.body.scrollTop = 0; document. ...

  7. 每天一点点之vue框架开发 - vue组件之间传值(父向子传值)

    路由文件 { path: '/productListBase', name: 'productListLink', component: ProductListBase, redirect: '/pr ...

  8. 每天一点点之vue框架开发 - vue 动态替换路由(地址栏)参数

    import merge from 'webpack-merge': // 修改原有参数 this.$router.push({ query:merge(this.$route.query,{'max ...

  9. vue渐进式开发的理解和指令

    1.vue渐进式开发 vue是一个渐进式的框架,轻量,易于上手,为啥是渐进式那,我当时也很蒙,比如的官网是jquery写的,就可以通过script标签引入事先准备好的vue.min.js的压缩源代码或 ...

随机推荐

  1. declaration of 'int ret' shadows a parameter

    定义的变量名称重复, 例如: int look_up_max(int m, int n) {   int m; //... return m; }

  2. Linux系统的关机、重启、睡眠

    一.关机.重启前的准备1.查看网络联机状态.后台可执行程序 查看一下两样东西,可以让你稍微了解主机目前的使用状态 查看网络联机状态:netstat  -a查看后台执行的程序:ps  -aux2.数据同 ...

  3. Qt编写气体安全管理系统9-数据查询

    一.前言 数据查询模块在整个系统中难度最低,由于Qt对数据库操作的封装堪称完美,所以各种查询都是手到擒来,不费吹灰之力.Qt中内置了sqlite数据库,你可以在数据库插件目录sqldrivers发现q ...

  4. ABAP DEMO 年月的搜索帮助

    效果图: *&---------------------------------------------------------------------* *& Report YCX_ ...

  5. [ jenkins ] 基础安装及权限管理

    1. 安装 jenkins 在安装 jenkins 之前需要 java 的支持 (1)安装 jdk1.8 [root@192.168.118.17 ~]#tar xf jdk-8u77-linux-x ...

  6. ECOC 2019展会:以太网联盟公开展示其下一代网络100/200/400G互通测试能力,网络自动化测试能力再次被提出

    欧洲光纤通讯展ECOC 2019正在火热进行,以太网联盟组织Ethernet Alliance在其公开展台演示了其下一代高速网络100G/200G/400G相关能力,其成员单位Cisco,Arista ...

  7. conda创建、删除、重命名环境

    链接:https://www.jianshu.com/p/7265011ba3f2 创建新环境 conda create -n rcnn python=3.6 删除环境 conda remove -n ...

  8. Amazon SQS 消息队列服务

    Amazon sqs是亚马逊提供的线上消息队列服务, 可以实现应用程序解耦,以及可靠性保证. sqs提供了两种消息队列, 一种是标准消息队列, 一种是先进先出队列(FIFO), 其区别是FIFO是严格 ...

  9. 6.66 分钟,一文Python爬虫解疑大全教入门!

    我收集了大家关注爬虫最关心的  16 个问题,这里我再整理下分享给大家,并一一解答. 1. 现在爬虫好找工作吗? 如果是一年前我可能会说爬虫的工作还是挺好找的,但现在已经不好找了,一市场饱和了,二是爬 ...

  10. Linux 实现回收站功能脚本

    #!/bin/bash function z-trash() { # 判断参数是否为空 if [ ! $1 ] then echo "z-trash error: file name of ...