Vue进阶 | vue3 与 TypeScript

108 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

对于熟悉了 Vue2 + js 模式的开发来说,Vue3+ts的变化让刚刚上手的时候有一种不太适应的感觉,不过用着用着感觉,真香。

在项目页面上,最直观的就是所有后缀为 .js 的文件 都变成了以 .ts 的形式展现。那么什么是 ts 呢?

TypeScript

typeScript 并不是一门新的语言,而是 JavaScript 的超集。从TypeScript的名字来看,它更加强调类型

我们可以理解为 TypeScript = JavaScript + 类型系统。

特点:

  • JavaScript 代码可与 TypeScript 一起工作
  • TypeScript 通过类型标注进行编译时的静态类型检查

image.png

安装

  • 方法1:

    npm install -g typescript
    
  • 方法2:

    VScode 安装ts插件

  • 编译ts代码:

    tsc app.ts
    

在Vue3中的使用

vue3 新增了 Composition API 的一些特性: setup()、computed()和 watch()等等。

1. script标签添加:lang="ts"

当是单文件组件时使用

<script lang="ts"></script>

或是:声明setup的形式(vue3 的新语法糖)

<script setup lang="ts"></script>

注:

  • 这种形式可以使用纯Typescript声明 props 和抛出事件;
  • 声明的变量、函数、import引入的内容、组件都能在模板中直接使用;
  • 模板会被编译成与其同一作用域的渲染函数,运行时性能会更好;
  • 必须使用 defineProps 和 defineEmits API 来声明 props 和 emits。

2. 定义组件

在Vue3中使用 defineComponent 用来定义组件,方式如下:

image.png

3. 标注类型

  1. ref 会根据初始化时的值推导其类型。变量赋值使用:.value。
const fruits = ref(["西瓜🍉", "香蕉🍌", "草莓🍓"]);
const str1 = ref("");
const myFunc = (index: number) => {
    fruits.value = fruits.value[index];
};
  1. 复杂的类型,用Ref()ref() 传入一个泛型参数
import { ref } from 'vue'
import type { Ref } from 'vue'

const year: Ref<string | number> = ref('2022')
const year2 = ref<string | number>('2022')

year.value = 2023 
year2.value = 2023 
  1. computed() 会自动从其计算函数的返回值上推导出类型
  2. 除此之外,可以使用 reactive() 接收对象,这是一种隐式的形式形式(不推荐)