vue3中ts的使用--组合式API

1.父子传参,props以及emits的标注类型

当使用<script setup lang="ts"></script>

通过父组件进行传参,然后在子组件中通过‘运行声明’的方式进行接收参数

<script setup lang="ts">
const props = defineProps({
  dataValue: { type: String, required: true },
  barValue: Number
})
</script>

当在非<script setup lang="ts"></script>的情况下

用defineComponent()先从props选项中推导出来,然后将props传入到setup(props){}函数中

import { defineComponent } from 'vue'

export default defineComponent({
  props: {
    message: String
  },
  setup(props) {
    props.message // <-- 类型:string
  }
})

为 组件emits添加标注类型

在 <script setup> 中,emit 函数的类型标注

<script setup lang="ts">
//第一种 运行时
const emit = defineEmits(['change', 'update'])

//第二种 基于类型
const emit = defineEmits<{
  (e: 'change', id: number): void
  (e: 'update', value: string): void
}>()

</script>

不在<script setup>的场景下

import { defineComponent } from 'vue'

export default defineComponent({
  emits: ['change'],
  setup(props, { emit }) {
    emit('change') // <-- 类型检查 / 自动补全
  }
})

2.为ref()和reactive()中添加标注类型

对于基本数据类型就用ref()

// 得到的类型:Ref<string | number> <>中可以添加都可能的数据类型作为泛型
const year = ref<string | number>('2020')

year.value = 2020 

对于复杂类型的数据优先使用reactive()

reactive() 也会隐式地从它的参数中推导类型:

import { reactive } from 'vue'

// 推导得到的类型:{ title: string }
const book = reactive({ title: '前端学习信息' })

要显示标注类型,可以使用接口

import { reactive } from 'vue'

interface Book {
  title: string
  year?: number
}

const book: Book = reactive({ title: '前端学习信息' })

3.computed标注类型

computed() 会自动从其计算函数的返回值上推导出类型:

import { ref, computed } from 'vue'

const count = ref(0)

// 推导得到的类型:ComputedRef<number>
const double = computed(() => count.value * 2)

// => TS Error: Property 'split' does not exist on type 'number'
const result = double.value.split('')

也可以通过泛型显示指定类型

const double = computed<number>(() => {
  // 若返回值不是 number 类型则会报错
})

4.为事件处理函数准备标注类型

默认情况下是隐式转换成any,如下是显示转换

function handleChange(event: Event) {
  console.log((event.target as HTMLInputElement).value)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue 3使用TypeScript时,v-for与ref组合式API类型问题可以通过以下步骤解决。 首先,根据提供的代码片段,我们可以看到在v-for循环使用了ref。为了解决类型问题,我们需要定义一个类型myType,它可以是ComponentPublicInstance、Element或null。然后,我们可以使用ref创建一个divs变量,类型为Array<HTMLDivElement>,并初始化为空数组。接下来,我们定义一个名为setRef的函数,它接受一个参数el,并将el类型转换为HTMLDivElement,并将其推入divs.value数组。因此,我们可以确保divs数组的元素都是HTMLDivElement类型。 其次,根据引用和引用提供的tsconfig.json配置,我们可以看到在target字段使用了不同的值。在引用使用了"target": "es2015",而在引用使用了"target": "es5"。为了解决这个问题,我们可以将tsconfig.json文件的目标字段(target)设置为"es2015"。 综上所述,要解决vue3 tsv-for与ref组合式API类型问题,需要注意以下几点: 1. 定义适当的类型,如myType,以确保v-for循环的元素与ref的类型匹配。 2. 使用ref创建一个数组,并确保数组的元素具有正确类型。 3. 在tsconfig.json将目标(target)字段设置为"es2015",以解决JS API版本太低的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3+ts,v-for与ref组合式API类型问题](https://blog.csdn.net/qq_36081714/article/details/127316368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue3+ts使用v-for出现unknown问题](https://blog.csdn.net/Heartbroken_man/article/details/123096263)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值