通过vue-cli命令行安装vue项目,注意不要eslint

  1. 安装依赖

    cnpm install typescript --save-dev
    cnpm install ts-loader --save-dev
  2. 在vue配置文件 webpack.base.conf.js 中做修改

    在rules中的js配置对象下面添加
    {
    test: /\.ts$/, 解析在vue文件中的ts脚本
    loader: 'ts-loader', 使用 ts-loader 解析
    exclude: /node_modules/, 无视node_modules
    options: {
    appendTsSuffixTo: [/\.vue$/], 设置vue文件可以使用ts
    }
    }
    然后将entry改成如下
    entry: {
    app: './src/main.ts'
    }
    再把你的入口文件main.js文件后缀名改成ts
    其余的配置不要动
  3. 新建指向文件

    在项目的src跟目录中创建一个后缀为.d.ts的文件,此文件名称随意,我使用index
    index.d.ts文件
    写如下代码,表示声明一个模块,应用于所有的vue组件的import语句中
    declare module "*.vue" {
    import Vue from "vue";
    export default Vue;
    }
    这个文件一旦声明,ts-loader就会找到Vue
  4. 新建typescript配置文件

    在项目根目录创建
    tsconfig.json文件
    添加如下配置
    {
    "compilerOptions": {
    "module": "es2015", 指定模块是es2015的
    "moduleResolution": "node", 指定路径解析方式用node
    "target": "es5", 指定编译后的js使用es5版本
    "allowSyntheticDefaultImports": true, 允许使用 import Vue from 'vue' 这类语法
    "lib": [
    "dom",
    "es5",
    "es2015.promise"
    ]
    },
    "include": [
    "src/**/*"
    ],
    "exclude": [
    "node_modules",
    "**/*.spec.ts"
    ]
    }
  5. 基本使用

    <script lang="ts">
    export default {
    name: 'HelloWorld',
    data (): object {
    return {
    msg: 'Welcome to Your Vue.js App'
    }
    }
    }
    </script>
  6. vue内置类型使用

    vue其实在你安装之后,默认已经帮你弄好了.d.ts文件,关于vue本身的验证他们都做好了,我们直接拿来用就可以了
    <script lang="ts">
    import Vue, { ComponentOptions } from 'vue';
    interface HelloWorld extends Vue {
    msg: string
    }
    export default {
    name: 'HelloWorld',
    data (): object {
    return {
    msg: 'Hello World!'
    }
    }
    } as ComponentOptions<HelloWorld>
    </script>
    ComponentOptions这个东西是用来验证vue的内置的一些属性,比如name,data,methods,并不会往深层次验证
    ComponentOptions<HelloWorld>相当于是验证了this,而data内部的值无法验证
    <script lang="ts">
    import Vue, { ComponentOptions } from 'vue';
    interface HelloWorld extends Vue {
    msg: string
    }
    export default {
    name: 'HelloWorld',
    data (): object {
    return {
    msg: 1111 /* 这样也是不会报错的*/
    }
    }
    } as ComponentOptions<HelloWorld>
    </script>
    为了解决这个问题,需要用到vue-class-component插件
  7. vue-class-component插件的使用

    使用这个插件,你需要把组件定义成原生的js类和一个@Component修饰符
    安装这个插件
    <script lang="ts">
    import Vue from 'vue';
    import Component from 'vue-class-component';
    @Component({
    template: `
    <div class="hello">
    {{message}}
    </div>`
    })
    export default class HelloWorld extends Vue {
    message: string = 'Hello'
    mounted(){
    this.message = 'ye'
    }
    }
    </script>
    这种写法完美解决上面的问题,而且写法简洁
    @Component是一个es7的修饰符,用来给类添加成员
    要运行上面的代码,还要在tsconfig.json文件中添加配置
    "experimentalDecorators": true

typescript整合到vue中的详细介绍,ts+vue一梭子的更多相关文章

  1. 转:Http协议中Cookie详细介绍

    Http协议中Cookie详细介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了, ...

  2. Vue.js——vue-resource详细介绍

    概述 Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没有必要引入jQuery.vue-resource是Vue.js的一款插件,它可以通过 ...

  3. vue中$nextTick详细讲解保证你一看就明白

    1.功能描述 今天我们要实现这个一个小功能: 页面渲染完成后展示一个div元素: 当点击这个div元素后: div元素消失: 出现一个input元素:并且input元素聚焦 想必大家我觉得简单,我们一 ...

  4. vue中的css作用域、vue中的scoped坑点

    一.css作用域 之前一直很困扰css的作用域问题,即使是模块化编程下,在对应的模块的js中import css进来,这个css仍然是全局的.导致在css中需要加上对应模块的html的id/class ...

  5. 关于Vue中main.js,App.vue,index.html之间关系进行总结

    在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,我们从培训视频或者官方文档上可以了解到: index.html---主页,项目入口 App. ...

  6. vue中使用Ajax(axios)、vue函数中this指向问题

    Vue.js 2.0 版本推荐使用 axios 来完成 ajax 请求.Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中. axios中文文档库:http ...

  7. vue中html、js、vue文件之间的简单引用与关系

    有关vue文件记录:index.html在html中运用组件 <body> <app></app> <!-- 此处app的组件为入口js main.js中定义 ...

  8. 关于 vue中 export default 和 new Vue({})

    对于刚开始学习vue的人(像我),一般都不会清楚的知道两者之间该怎么区分,甚至觉得两者是一样的. 那么,经过我的查证,发现两者之间是没有任何联系的. export default ES6 Module ...

  9. vue中keepalive怎么理解?​---vue中文社区

    vue中keepalive怎么理解? 说在前面: keep-alive是vue源码中实现的一个组件, 感兴趣的可以研究源码 https://github.com/vuejs/vue/blob/dev/ ...

随机推荐

  1. Kafka详解二:如何配置Kafka集群

    问题导读1.Kafka有哪几种配制方法?2.如何启动一个Consumer实例来消费消息? Kafka集群配置比较简单,为了更好的让大家理解,在这里要分别介绍下面三种配置 单节点:一个broker的集群 ...

  2. 玲珑杯 第4次 String cut(暴力字符串)

    题意:给你长度为n(<=100000)的字符串,问你任意删除一个字符后得到循环节最多的数量是多少 题解:最简单的想法就是枚举删除的字符,再kmp求循环节,但是时间复杂度为O(n*n)会超时 因此 ...

  3. QT QDockWidget锚接部件 和 QTreeWidget 树形部件 构成树形选择项

    1.  如图,在mainwindow中 添加DockWidget到右侧,里面镶嵌TreeWidget. 2. QTreeWidget *treeWidget = new QTreeWidget; // ...

  4. hdu 5890 Eighty seven 暴力+bitset优化背包

    Eighty seven Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) P ...

  5. Word 2010 怎么在每一章中使用不同的页眉

    1.要做到每一章的页眉不同首先要进行   分节 word2010中  页面布局   ->  分隔符  ->下一页 上述操作即可实现分节 2.实现分节后,在每一节开头的那一页,编辑页眉   ...

  6. SMB/CIFS协议简介

    1. 简介:(ServerMessage Block)服务消息块通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议.SMB从I ...

  7. signal 信号具体含义解释~

    ) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控 制进程结束时, 通知同一session内的各个作业,这时它们与控制终端不再关联. ) SIGINT 程序终止(int ...

  8. 【整理】C++中的unique函数

    之前总结了一下我觉得有用的erase,lower_bound,upper_bound. 现在总结一下unique,unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复 ...

  9. .net remoting和wcf自托管——一个bug引发的警示

    一.解决问题,需要深入,并从细节入手,多从代码找原因,不能认为代码是死的,不会出错: 之前代码都运行良好,突然某一天,在我电脑上出问题了.出了问题,那就应该找出原因.其实这个问题,本身并不难,好歹给你 ...

  10. AtCoder Beginner Contest 087 D - People on a Line

    Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement There are N people sta ...