如何在vue中使用ts开发

2023-05-16

用了这么久的vue,终于踏出第一步使用ts去开发,发现真的是一时用ts一时爽,一直用ts一直爽。所以今天大概说一下怎么用ts简单开发。

1.首先,更改一下webpack配置

  1. 修改入口文件 [因为使用ts开发,所以文件都是ts]

    entry: {
        app: '.src/main.js'
    }复制代码

  2. 根路径下添加 tsconfiog.js配置文件,下面的是自己的一份简单的配置可参考

    {
      // 编译选项    "compilerOptions": {        "module": "esnext",        "strict": true,        "jsx": "preserve",        "typeRoots" : ["./typings"],        "importHelpers": true,        "moduleResolution": "node",        "experimentalDecorators": true,        "esModuleInterop": true,        "allowSyntheticDefaultImports": true,        "sourceMap": true,        "baseUrl": ".",        "skipLibCheck": true,        "skipDefaultLibCheck": true,        "strictNullChecks": true,        "downlevelIteration": true,        "target": "es5",        "noImplicitAny": false,        "allowJs": true,        "outDir": "./dist/",   // 输出目录        "noImplicitThis": false,        "removeComments": false,        "types": [            "webpack-env"        ],        "paths": {   // @代表src模块的路径            "@/*": [                "src/*"            ]        },        "lib": [   // 编译过程中需要引入的文件            "esnext",            "dom",            "dom.iterable",            "scripthost",            "es5",            "es2015",            "es2016",            "es2017",            "es2015.promise",            "es2015.collection",            "es2015.iterable",            "es2015.core",            "dom"        ]    },    "awesomeTypescriptLoaderOptions": {},    "declaration": true,    "include": [        "src/**/*.ts",        "src/**/*.tsx",        "src/**/*.vue",    ],    "exclude": [        "node_modules",        "src/main.ts"    ]}复制代码

  3. 根目录下添加 tslint.json文件 ,[规范一下书写ts],下面的也是一些简单配置

    {    "extends": [        "tslint:recommended"    ],    "lib": [        "ES2015",        "ES2016",        "ES2017"    ],    "linterOptions": {        "exclude": [            "node_modules",            "dist",            "config",            "build",            "./**/*.js",            "src/api/**",            "src/components/common/**",            "src/components/page/**",            "src/components/public/**",            "static/**"        ]    },    "rules": {        "member-access": [            true,            "no-public"        ],        "interface-name": [            true,            "always-prefix"        ],        "align": [            true,            "parameters",            "statements"        ],        "class-name": true,        "comment-format": [            true,            "check-space"        ],        "curly": true,        "eofline": true,        "forin": false,        "indent": [            true,            "spaces"        ],        "noImplicitThis": false,        "jsdoc-format": false,        "label-position": true,        "max-line-length": [            true,            200        ],        "no-any": false,        "no-arg": true,        "no-bitwise": false,        "no-conditional-assignment": true,        "no-consecutive-blank-lines": true,        "no-console": [            false,            "debug",            "info",            "log",            "time",            "timeEnd",            "warn",            "trace"        ],        "no-construct": true,        "no-constructor-vars": false,        "no-debugger": false,        "no-duplicate-variable": true,        "no-empty": false,        "no-eval": true,        "no-internal-module": true,        "no-namespace": true,        "no-reference": true,        "no-shadowed-variable": false,        "no-string-literal": true,        "no-switch-case-fall-through": false,        "no-trailing-whitespace": true,        "no-unused-expression": [            true,            "allow-fast-null-checks"        ],        "no-use-before-declare": false,        "no-var-keyword": true,        "no-var-requires": false,        "object-literal-sort-keys": false,        "one-variable-per-declaration": [            true,            "ignore-for-loop"        ],        "quotemark": [            true,            "single",            "jsx-double"        ],        }复制代码

  4. 要让ts认识vue文件,[在src路径下面添加vue-shim-d.ts]

    import router from '@/config/router';
    import { Comfirm, MessageBox } from 'element-ui';
    import Vue from 'vue';import VueRouter from 'vue-router';
    import { Route } from 'vue-router';import Tools from '@/utils/tools';
    import Api from '@/config/api';
    // 扩充
    declare module 'vue/types/vue' {
      // 这些是全局属性,可以直接this.$api这样类似使用  
      interface Vue {    
        $router: VueRouter;        
        $route: Route;          
        $message: MessageBox;        
        $conform: Comfirm;        
        $tools: Tools;        
        $api: Api;     
    }}复制代码

需要注意一点的是在导入vue文件的时候,要写上.vue后缀,因为TypeScript默认识别ts文件。

2. 改造一下vue文件

在这之前我们需要安装一个插件 vue-property-decorator,是在 vue-class-component 上增强了更多的结合 Vue 特性的装饰器,新增了一些装饰器。

src/app.vue

 [lang="ts",让webpack把这段代码识别为ts,除了需要改造一下script标签内的内容,其他地方都无需修改]

<template>  
    <div id="app">    
        <router-view></router-view>  
    </div>
</template>

<script lang="ts">
    import { Component, Vue } from 'vue-property-decorator';
    @Componentexport 
    default class App extends Vue {  
        private created() {    
            // 不需要保持当前路由,则前往首页    
            if (!location.hash.includes('keepRoute=true')) {      
                this.$router.push({ path: '/' });    
            }  
         }}
</script>

<style>
@import "./assets/css/main.css";
@import "./assets/css/color-dark.css"; /*深色主题*/
</style>复制代码

下面举例一下常用的装饰器使用

<script lang="ts">
import Test from './test.vue';
import { Component, Prop, Provide, Vue, Watch  } from 'vue-property-decorator';
// 引入组件 即使没有使用组件也得书写 @Component,里面为空即可。
@Component({    
    components: {      
        Test    
    },  
})

 export default class Home extends Vue {
  // Prop  
    @Prop({}) private config: object = {};

  // data   
    private side: boolean = false;
    private list: object = {};
  
 //  Watch
    @Watch('config')  
    onConfigChanged(val: any, oldVal: any) {    
        this.init();  
    }}

  // 生命周期
    private created(){
        this.init();
    }

  // 方法
    private init(){
        console.log('halo');
    }
</script>复制代码

其他的文件也是参照方式去修改即可。

最后重新运行就行了。


转载于:https://juejin.im/post/5ccadfa76fb9a032060c3669

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在vue中使用ts开发 的相关文章

  • Booksort 启发式函数很重要h(s1)<=h(s2)+cost(s1,s2);

    Problem Description The Leiden University Library has millions of books When a student wants to borrow a certain book he
  • FreeBSD的基本系统下Shell设置(转)

    FreeBSD的基本系统下Shell设置 转 64 more 64 命令解释程序shell是与用户关系最密切的应用程序 xff0c 用户主要通过shell使用系统 在每次登录系统之后 xff0c 就启动了一个与用户交互的shell xff0
  • 20050410:他们不过是一群政客

    从来就没有把台湾人民的利益放在眼里 xff0c 甚至不惜拿他们来做挡箭牌 xff0c 一边还对日本谄媚有加 转载于 https www cnblogs com yidinghe archive 2005 04 10 134987 html
  • 排列组合公式

    注 xff1a 排列与元素的顺序有关 xff0c 组合与顺序无关 xff0e 如231与213是两个排列 xff0c 2 xff0b 3 xff0b 1的和与2 xff0b 1 xff0b 3的和是一个组合 xff0e 1 xff0e 排列
  • Mybatis初始化机制

    对于任何框架而言 xff0c 在使用前都要进行一系列的初始化 xff0c MyBatis也不例外 本章将通过以下几点详细介绍MyBatis的初始化过程 1 MyBatis的初始化做了什么 2 MyBatis基于XML配置文件创建Config
  • ValidationSummary控件

    ValidationSummary控件用于在页面中的一处地方显示所有验证错误的列表 这个控件在使用大的表单时特别有用 如果用户在页面底部的表单字段中输入了错误的值 xff0c 那么这个用户可能永远也看不到错误信息 不过 xff0c 如果使用
  • 数据特征分析——概述

    一 6个基础分析思路 xff1a 1 分布分析 2 对比分析 3 统计分析 4 帕累托分析 5 正态性检验 6 相关性分析 二 分布分析 分布分析 xff1a 研究数据的分布特征和分布类型 xff0c 分定量数据 定性数据区分基本统计量 三
  • Filebeat 6.0 把日志直接输入到ES中如何自定义index

    临时搭建了一套EFK xff08 elasticsearch xff0c filebeat xff0c kibana xff09 xff0c filebeat 6 0 默认的index 是filebeat 43 时间 xff0c 这样无法满
  • 人在异乡

    为什么到了上海五年 xff0c 还是没有归属感 to be continued
  • 怎么求矩阵对应的基

    怎么求矩阵对应的基呢 xff1f 对矩阵做初等行变换 xff0c 化为上三角形 或 对角型 xff0c 主对角元素不为0的列即为该矩阵的一组基 A 61 这个矩阵对应的一个基 为 其实 xff0c 将第二行的 1 倍加到第一行上 xff0c
  • javascript弹出窗口代码

    1 最基本的弹出窗口代码 lt SCRIPT LANGUAGE 61 34 javascript 34 gt lt window open 39 page html 39 gt lt SCRIPT gt 因为着是一段javascripts代
  • 大规模异步新闻爬虫【5】:网页正文的提取

    前面我们实现的新闻爬虫 xff0c 运行起来后很快就可以抓取大量新闻网页 xff0c 存到数据库里面的都是网页的html代码 xff0c 并不是我们想要的最终结果 最终结果应该是结构化的数据 xff0c 包含的信息至少有url xff0c
  • 网络安全态势可视化

    导语 网络态势可视化技术作为一项新技术 xff0c 是网络安全态势感知与可视化技术的结合 xff0c 将网络中蕴涵的态势状况通过可视化图形方式展示给用户 xff0c 并借助于人在图形图像方面强大的处理能力 xff0c 实现对网络异常行为的分
  • 滚动窗口

    本页目录 语法案例 滚动窗口 xff08 TUMBLE xff09 将每个元素分配到一个指定大小的窗口中 通常滚动窗口有一个固定的大小 xff0c 并且不会出现重叠 例如 xff1a 如果指定了一个5分钟大小的滚动窗口 xff0c 无限流的
  • Qt5&OpenCV3 UDP协议实现实时视频传输与通信

    打算在树莓派上挂载摄像头 xff0c 通过WIFI模块传输到上位机 局域网内带宽不是问题 xff0c 为了保证实时性 xff0c 也没有必要进行复杂的视频编码和解码 xff0c 于是通过截图然后使用UDP协议传输应该是可以的 所以最近试探性
  • BeanUtils.copyProperties忽略某些字段的值及其原理

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 用法 例如 xff1a BeanUtils copyProperties beforeObj route new String 34 id 34 34 createDa
  • 关于C语言中的科学计数法问题。

    变量 不能作为e的指数 是的 double a 61 3 5e2 double a 61 3 5e0 double a 61 3 5e 2 只能是字面常量 xff0c 而且必须是整数 xff0c 正负0均可 double a 61 3 5e
  • Access Denied when running Spring.IocQuickStart.MovieFinder

    I just begin to learn something about Spring Net heaps of probem are waiting for me The very first one has been solved I
  • 错误提示窗口-“操作系统当前的配置不能运行此应用程序”

    有些人安装的Windows系统里的office是精简版的 xff0c 只适合普通办公处理word和excel xff0c 以及PPT xff0c 但是我们要研究一些关于数据库的知识时会受到阻碍 xff0c 大多数人会自己在网上随便找了一个A
  • matlab练习程序(倾斜校正,透视变换)

    过去也写过透视变换 xff0c 当时算法真是弱爆了 xff0c 我竟然会通过两次变换 不过那引用的三篇文章都是非常好的文章 xff0c 直到今天我才看明白 所谓的倾斜校正 xff0c 一定要有标定点 xff0c 将一个倾斜的矩形变为不倾斜的

随机推荐