zoukankan      html  css  js  c++  java
  • 17、vue-cli3 js项目中引入ts混用(typeScript)

    说明:

    vue3.0搭建的项目,不过没有引入ts,后来需要用到一个插件是用ts写的,所以vue要用到ts。。。

    一、安装typescript及loader

    npm install typescript ts-loader --save-dev

    image

    二、安装vue-property-decorator

    npm install vue-property-decorator --save-dev

    image

    三、配置vue.config.js

    module.exports = {
     configureWebpack: {    
        resolve: { extensions: [".ts", ".tsx", ".js", ".json"] },    
        module: {        
          rules: [    
            {    
              test: /.tsx?$/,    
              loader: 'ts-loader',    
              exclude: /node_modules/,    
              options: {
                appendTsSuffixTo: [/.vue$/],    
              }    
            }        
          ]    
        }    
      }  
    }  
    
    var path = require('path');
    module.exports = {
      outputDir:'vuecli3',
      publicPath: './',
      devServer: {
        // 设置主机地址
        host: 'localhost',
        // 设置默认端口
        // port: '8080',
        // 打开浏览器
        open: true,
        port: 9000,
        // 设置代理
        // proxy: {
        //   '/api': {
        //     target: 'http://localhost:8081',
        //     pathRewrite: {
        //       '^/api': '/mock'
        //     }
        //   }
        // }
      },
      configureWebpack: {
        resolve: { extensions: [".ts", ".tsx", ".js", ".json"] },
        module: {
          rules: [
            {
              test: /.tsx?$/,
              loader: 'ts-loader',
              exclude: /node_modules/,
              options: {
                appendTsSuffixTo: [/.vue$/],
              }
            }
          ]
        }
      }
    }
    

    image

    四、新建tsconfig.json放在项目根目录

    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "strict": true,
        "strictNullChecks": true,
        "esModuleInterop": true,
        "experimentalDecorators": true
      }
    }
    
    

    image

    五、在src目录下新建vue-shim.d.ts文件

    不加此文件会报错。。

    image

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

    六、运行测试

    <template>
    	<div>
        <el-button type="primary" @click="msgBtn">{{msg}}</el-button>
        <el-card shadow="always">
          {{test}}
        </el-card>
    	</div>
    </template>
    <script lang='ts'>
    import { Component, Vue } from "vue-property-decorator";
    
    export default Vue.extend({
      components: {
        // TableCom
      },
      data() {
        return {
          msg:'typescript'
        };
      },
      created(){
        console.log('created',this.msg)
      },
      mounted() {
        console.log('mounted')
      },
      computed:{
        // test: {
        //   // 需要标注有 `this` 参与运算的返回值类型
        //   get(): string {
        //     return this.msg
        //   },
        //   set(val: string) {
        //     this.msg = val
        //   }
        // }
        test(): any {
          return this.msg
        }
      },
      watch:{
        msg(val:any){
          console.log('watch',val)
        }
      },
      methods:{
        msgBtn(ev:any){
          this.msg = "点击了typescript"
          console.log('点击事件',ev)
        }
      }
    })
    
    </script>
    

    image

    image

  • 相关阅读:
    destroy-method="close"
    2.2 Spring的结构组成--Spring源码深度解析
    2.1 Spring容器的基本实现--Spring源码深度解析
    1.2 Spring环境搭建--Spring源码深度解析
    1.1 Spring的整体架构--Spring源码深度解析
    迟到的2016年计划
    spring学习 之helloworld
    从零实现DNN 探究梯度下降的原理
    Java注解——这些@圈圈都是个啥?
    自动发送日报,骗过你的领导^-^
  • 原文地址:https://www.cnblogs.com/zhongchao666/p/11207117.html
Copyright © 2011-2022 走看看