跳至主要內容

vue 全家桶结合 TypeScript

星火燎原@vxhly大约 2 分钟vuejsVue.jsVuexVueRouterNode.js

前言

自从 vue cli 升级到 3.0 之后, vue 项目对 TypeScript 的支持度也不断的提升, 为了更好的学习 TypeScript, 本篇文章记录着 vue 全家桶结合 TypeScript 的食用方式。

vue-cli 3.0

cli 工具到底升级了什么

  • GUI 项目管理界面
  • 更加简洁的目录结构
  • TypeScript 的支持
  • Git Hook 提交 commit 的时候检查代码的规范性
  • 依赖和插件管理更加方便(GUI 管理)
  • Progressive Web App 的支持
  • Vue Router & Vuex
  • ESLint / TSLint / Prettier
  • 用 Jest 或 Mocha 进行单元测试
  • 用 Cypress 或者 Nightwatch 进行 E2E 测试
  • 预配置 webpack 功能, 如模块热替换、代码拆分、 摇树优化(tree-shaking)、高效持久化缓存等
  • 通过 Babel 7 + preset-env(Babel 插件)对 ES2017 进行转换和基于使用情况注入 polyfill
  • 支持 PostCSS(默认启用 autoprefixer)和所有主要的 CSS 预处理器

安装

npm i -g @vue/cli

创建项目

vue create [productName]
# or
vue ui

在选方案时, 记得把 TypeScript 的支持勾选

TypeScript

TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集, 而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程. TypeScript 扩展了 JavaScript 语法, 任何已经存在的 JavaScript 程序, 可以不加任何改动, 在 TypeScript 环境下运行。TypeScript 只是向 JavaScript 添加了一些新的遵循 ES6 规范的语法, 以及基于类的面向对象编程的这种特性。

在项目中食用 TypeScript

vue

data

<script lang="ts">
  import Vue from "vue";
  import Component from "vue-class-component";

  @Component
  export default class App extends Vue {
    msg1: number = 123;
    msg2: String = "hello word";
    obj: Object = {
      msg1: 123,
      msg2: "hello word",
    };
    arr: Array = [123, "hello word"];
  }
</script>

======>

<script>
  export default {
    name: "App",
    data() {
      return {
        msg1: 123,
        msg2: "hello word",
        obj: {
          msg1: 123,
          msg2: "hello word",
        },
        arr: [123, "hello word"],
      };
    },
  };
</script>

watch

提示

@Watch(path: string, options: WatchOptions = {})

<script lang="ts">
  import { Vue, Component, Watch } from "vue-property-decorator";

  @Component
  export default class YourComponent extends Vue {
    @Watch("child")
    onChildChanged(val: string, oldVal: string) {}

    @Watch("person", {
      immediate: true,
      deep: true,
    })
    onPersonChanged(val: Person, oldVal: Person) {}
  }
</script>

======>

<script>
  export default {
    watch: {
      child: {
        handler: "onChildChanged",
        immediate: false,
        deep: false,
      },
      person: {
        handler: "onPersonChanged",
        immediate: true,
        deep: true,
      },
    },
    methods: {
      onChildChanged(val, oldVal) {},
      onPersonChanged(val, oldVal) {},
    },
  };
</script>

vuex

axios

需要安装描述文件

yarn add -D @types/axios

一个栗子

config.ts

const serverURL: String = "http://127.0.0.1:8090/api";
export { serverURL as url };

axios.ts

import axios from "axios";
import { url } from "@/config";

const protocol = window.location.protocol;
const host = window.location.host;
const domain = document.domain;
let serverURL: any = "";

if (domain === "127.0.0.1" || domain === "localhost") {
  serverURL = url;
} else {
  serverURL = `${protocol}` + "//" + `${host}:8090/api`;
}

// 创建 axios 实例
const instance = axios.create({
  baseURL: serverURL,
  timeout: 0,
});

export default instance;
打赏
给作者赏一杯咖啡吧
您的支持将是我继续更新下去的动力
微信微信
支付宝支付宝