Vue中如何运用TS语法

 更新时间:2023年02月28日 10:51:48   作者:Her...  
本文主要介绍了Vue中如何运用TS语法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、父子传值的用法

父传子:defineProps的TS写法

// 父组件:和 vue2 一样正常传值
<template>
  <div class="login-page">
    <cp-nav-bar title="登录" right-text="注册"></cp-nav-bar>
  </div>
</template>
// 子组件:接收
<script setup lang="ts">
import { defineProps } from 'vue'
const props = defineProps<{
  title: string
  rightText?: string // ?表示可传可不传
}>()
// js中使用
console.log(props.title)
</script>
 
<template>
  <!-- 模板中直接使用变量名 -->
  <van-nav-bar
    fixed
    left-arrow
    :title="title"
    :right-text="rightText"
  ></van-nav-bar>
</template>

补充:

如果需要给 props 设置默认值,需要使用 withDefaults 函数:

const props = withDefaults(defineProps<{
  title?: string
  rightText?: string
}>(),{
  title: '首页'
})
 
// 以上代码通过语法糖解构,可以优化成如下代码:
const { title, title= "首页" } = defineProps<{
  title?: string
  rightText?: string
}>();

子传父:defineEmits的TS写法

// 子传
const emit = defineEmits<{
  (e: 'changeMoney', money: number): void
  (e: 'changeCar', car: string): void
}>()
 
// 父组件:和 vue2 一样正常接收
// @changeMoney="方法名"

二、ref/reactive的TS用法

1.简单数据类型可以不定义ts类型

ref() 会隐式的依据数据推导类型

// const money = ref<number>(10)
const money = ref(10)

2.如果是复杂类型,建议用泛型

type Todo = {
  id: number
  name: string
  done: boolean
}
const list = ref<Todo[]>([])
list.value = [
  { id: 1, name: '吃饭', done: false },
  { id: 2, name: '睡觉', done: true }
]

三、computed的TS用法 

推荐泛型,一行搞定

const total = computed<string>(() => (count.value * 2).toFixed(2));

四、非空断言

1.可选链

<script setup lang="ts">
import { onMounted, ref } from 'vue';
 
const input = ref< HTMLInputElement | null >(null)
 
onMounted(()=>{
  // 如果获取的元素不是input,就可能没有value值
  console.log(input.value?.value);
})
</script>
 
<template>
  <div>App组件</div>
  <input type="text" ref="input" value="abc">
</template>

2.非空断言

  // 一定要确定不为空!!!
  console.log(input.value!.value)
  input.value!.value = '123'

五、自定义TypeScript类型声明文件

1.给JS文件提供类型

在导入 .js 文件时,TS 会自动加载与 .js 同名的 .d.ts 文件,以提供类型声明。

具体步骤如下:

1.declare 关键字:用于类型声明,为其他地方(比如,.js 文件)已存在的变量声明类型,而不是创建一个新的变量。

2.对于 type interface 等这些明确就是 TS 类型的(只能在 TS 中使用的),可以省略 declare 关键字。

3.其他 JS 变量,应该使用 declare 关键字,明确指定此处用于类型声明。

// 参考示例:自定义组件的类型,必须是同名的.d.ts文件
import CpIcon from '@/components/CpIcon.vue'
 
declare module 'vue' {
  interface GlobalComponents {
    CpIcon: typeof CpIcon
  }
}

2.共享类型

如果多个 .ts 文件中都用到同一个类型,此时可以创建 .d.ts 文件提供该类型,实现类型共享。

1.创建 index.d.ts 类型声明文件。

2.创建需要共享的类型,并使用 export 导出(TS 中的类型也可以使用 import/export 实现模块化功能)。

3.在需要使用共享类型的 .ts 文件中,通过 import 导入即可(.d.ts 后缀导入时,直接省略)。

到此这篇关于Vue中如何运用TS语法的文章就介绍到这了,更多相关Vue运用TS语法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解基于Vue cli开发修改外部组件Vant默认样式

    详解基于Vue cli开发修改外部组件Vant默认样式

    这篇文章主要介绍了详解基于Vue cli开发修改外部组件Vant默认样式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 一文带你搞懂Vue3中Pinia的使用

    一文带你搞懂Vue3中Pinia的使用

    用官网的一句话来说:Pinia 是 Vue的专属状态管理库,Pinia就是为vue3而生。本文将通过一些示例详细介绍一些Pinia的使用,希望对大家有所帮助
    2022-11-11
  • Vue中v-for的数据分组实例

    Vue中v-for的数据分组实例

    下面小编就为大家分享一篇Vue中v-for的数据分组实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vite打包性能优化之开启Gzip压缩实践过程

    Vite打包性能优化之开启Gzip压缩实践过程

    vue前端项目发布的时候,打包可实现gzip格式的压缩,下面这篇文章主要给大家介绍了关于Vite打包性能优化之开启Gzip压缩的相关资料,需要的朋友可以参考下
    2022-12-12
  • uniapp实现webview页面关闭功能的代码示例

    uniapp实现webview页面关闭功能的代码示例

    uniapp用web-view打开一个网页,网页中点击跳转到下一层级的网页,一层层深入,点击返回键或者页面上方返回按钮只能一层层往回退,下面这篇文章主要给大家介绍了关于uniapp实现webview页面关闭功能的相关资料,需要的朋友可以参考下
    2024-03-03
  • 如何通过Vue自定义指令实现前端埋点详析

    如何通过Vue自定义指令实现前端埋点详析

    埋点分析是网站分析的一种常用的数据采集方法,下面这篇文章主要给大家介绍了关于如何通过Vue自定义指令实现前端埋点的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Vue使用pages构建多页应用的实现步骤

    Vue使用pages构建多页应用的实现步骤

    在大部分实际场景中,我们都可以构建单页应用来进行项目的开发和迭代,然而对于项目复杂度过高或者页面模块之间差异化较大的项目,我们可以选择构建多页应用来实现,那么什么是多页应用,本文就给大家介绍了Vue使用pages构建多页应用的实现步骤
    2024-12-12
  • Vue 2.5.2下axios + express 本地请求404的解决方法

    Vue 2.5.2下axios + express 本地请求404的解决方法

    下面小编就为大家分享一篇Vue 2.5.2下axios + express 本地请求404的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • vue3新拟态组件库开发流程之table组件源码分析

    vue3新拟态组件库开发流程之table组件源码分析

    这篇文章主要介绍了vue3新拟态组件库开发流程——table组件源码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • vue中el-select 和el-tree二次封装实现

    vue中el-select 和el-tree二次封装实现

    本文介绍了vue中el-select 和el-tree二次封装实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11

最新评论