在 Vue中使用TS(常用操作)

写在前面

package.json
“dependencies”: {
“vue”: “^3.4.31”
},
“devDependencies”: {
“@vitejs/plugin-vue”: “^5.0.5”,
“typescript”: “^5.2.2”,
“vite”: “^5.3.4”,
“vue-tsc”: “^2.0.24”
}

1. 父传子

// Father 组件
// 父传子
<script setup lang="ts">
import Son from './components/Son.vue'
// 父传子
const msg: string = 'Hello World'


// 子组件向父组件传递数据
const sonHandler = (msg: string) => {
  console.log('father收到了:' + msg)
}


</script>

<template>
  <div>
    <Son :msg="msg" @sonHandler="sonHandler" />
    <!-- <Son /> -->
  </div>
</template>
// Son组件
<template>
    <div>
        <h3>我是子组件 {{ msg }}</h3>
        <button type="button" @click="handleClick">
            点击接收子组件数据
        </button>
    </div>
</template>

<script setup lang="ts">
// 父传子
// 非TS语法
/* defineProps({
    msg: {
        type: String,
        default: '我是默认值'
    }
}) */

// TS语法
type Props = {
    msg?: string
    description?: string
}

// 默认值操作
// 低版本Vue不建议使用
const a = withDefaults(defineProps<Props>(), {
    msg: '我是默认值',
    description: '我是默认描述'
})

// console.log(a)

// 非TS语法 子传父
/* const emit = defineEmits(['sonHandler'])

const handleClick = () => {
    emit('sonHandler', '大别墅')
} */


// TS语法 子传父
const emit = defineEmits<{
    // Vue3.3以前的写法
    // (e: 'sonHandler', msg: string): void

    // Vue3.3以后的写法
    sonHandler: [msg: string]
}>()

const handleClick = () => {
    emit('sonHandler', '大别墅')
}

</script>

2. Ref 与 Computed 的使用

<template>
  <div>
    {{ msg }}
  </div>

  <div v-for="item in list" :key="item.id">
    {{ item.id }} --- {{ item.name }}
  </div>
</template>

<script setup lang="ts">
import { computed, ref } from 'vue';


const msg = ref<number>(0)


type Todo = { id: number, name: string }[]
const list = ref<Todo>([
  {
    id: 1,
    name: 'test'
  },
  {
    id: 2,
    name: 'test2'
  }
])

// 计算属性 ==> 在绝大多数的时候,都不需要手动指定类型,会类型推断
const leftCount = computed(() => {
  return list.value.length
})

</script>

3. 事件类型处理

// 事件类型
const handleClick = (e: MouseEvent) => {
  console.log(e.pageX, e.pageY)
}

在这里插入图片描述


1. TypeScript 类型声明文件

由于第三方包最终都会打包成 js 文件,就会丧失 TS 的类型特性
所以这些第三方库都会提供一个 .d.ts 结尾的类型声明文件,来告诉开发者这个库所拥有的所有类型

在这里插入图片描述
在这里插入图片描述

补充:

第三方库可能没有提供类型声明文件(jquery, lodash),那我们将无法正常在 TS 中使用,就需要自行下载第三方提供的类型声明文件。

@types/xxxx 这里来找

2. 自定义类型声明文件 - 共享数据

在这里插入图片描述
在这里插入图片描述

综合案例

案例源码地址: https://gitee.com/wei-zhou-abc/tsxuexilicheng

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 + TypeScript 的项目,我们可以使用很多 TypeScript 的高级运用技巧来提高代码的质量和可维护性,下面是一些常用的技巧: 1. 类型推断: Vue 3 的 Composition API 非常适合使用 TypeScript 来编写,由于 Composition API 使用了很多函数式编程的技巧,所以我们可以使用类型推断来更好地理解代码的含义和作用。 2. 类型声明文件: 在 Vue 3 + TypeScript ,我们可以使用类型声明文件来描述一些第三方库或组件的类型,从而提高代码的可读性和可维护性。 3. 类型自动推导: TypeScript 可以自动推导出一些变量的类型,例如使用 `const` 声明的变量会自动推导出变量的类型,这可以避免一些类型定义的重复和繁琐。 4. 类型别名和接口: 在 Vue 3 + TypeScript ,我们可以使用类型别名和接口来定义复杂的数据类型,从而使代码更加易读和易维护。 5. 类型守卫: Vue 3 + TypeScript 可以使用类型守卫来判断变量的类型,并根据不同类型执行不同的代码逻辑,例如使用 `if (typeof x === 'string')` 来判断变量 `x` 是否是字符串类型。 6. 泛型: 在 Vue 3 + TypeScript ,我们可以使用泛型来编写通用组件和方法,从而提高代码的复用性和灵活性。 以上是 Vue 3 + TypeScript 常用的一些 TypeScript 高级运用技巧,它们可以帮助我们编写出更加健壮、可维护的代码,并且提高代码的可读性和可复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值