vue 3 + TS 组合式标注类型

1.组件的 emits 标注类型

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

// 基于选项
const emit = defineEmits({
  change: (id: number) => {
    // 返回 `true` 或 `false`
    // 表明验证通过或失败
  },
  update: (value: string) => {
    // 返回 `true` 或 `false`
    // 表明验证通过或失败
  }
})

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

// 3.3+: 可选的、更简洁的语法
const emit = defineEmits<{
  change: [id: number]
  update: [value: string]
}>()
</script>

2.为 provide / inject 标注类型

import { provide, inject } from 'vue'
import type { InjectionKey } from 'vue'

const key = Symbol() as InjectionKey<string>

provide(key, 'foo') // 若提供的是非字符串值会导致错误

const foo = inject(key) // foo 的类型:string | undefined
2.1:tip:建议将注入 key 的类型放在一个单独的文件中,这样它就可以被多个组件导入,可以添加如页面结构上的文件夹 types —>typesData.ts,使用 export 导出。

3.defineExpose 组件:子传父

3.1当你可能需要为一个子组件添加一个模板引用,以便调用它公开的方法。举例来说,我们有一个 MyModal 子组件,它有一个打开模态框的方法:
<!-- 子组件 MyModal.vue -->
<script setup lang="ts">
import { ref } from 'vue'

const isContentShown = ref(false)
const open = () => (isContentShown.value = true)

defineExpose({
  open
})
</script>


<!--父组件 App.vue -->
<script setup lang="ts">
import MyModal from './MyModal.vue'

const modal = ref<InstanceType<typeof MyModal> | null>(null)

const openModal = () => {
  modal.value?.open()
}
</script>
3.2当你是传值时
<!-- 父组件.vue -->
<Index ref="childeRef"></Index>
 
<script setup>
    import Index from "./index.vue";
    const childeRef = ref();
    function test() {
        console.log(childeRef.value.msg) // Hello World
    }
    onMounted(() => {
      let flag:boolean = true;
      let value:number= 5;
      childeRef.value.childFn(flag,value) // 调用子组件函数, 输出 6
    })
</script>


<!-- 子组件.vue -->
<script setup>
    import {ref} from "vue";
 
    function childFn(type:boolean, data:number) {
        console.log('我是子组件');
        if(data){
           let value = data + 1;   
           return value;
        }
    }
    
    const msg = 'Hello World';
    const num = ref(0);
    
    defineExpose({ //暴露想要传递的值或方法
        msg,
        childFn,
    });
</script>

相关推荐

  1. vue 3 + TS 组合标注类型

    2024-04-26 02:50:01       34 阅读
  2. vue3组件TS类型声明实例代码

    2024-04-26 02:50:01       42 阅读
  3. Vue3组合API + TS项目中手写国际化插件

    2024-04-26 02:50:01       35 阅读
  4. Vue3 逻辑复用 - 组合函数

    2024-04-26 02:50:01       65 阅读
  5. vue3组合函数

    2024-04-26 02:50:01       47 阅读
  6. vue3组合api(一)

    2024-04-26 02:50:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 02:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 02:50:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 02:50:01       82 阅读
  4. Python语言-面向对象

    2024-04-26 02:50:01       91 阅读

热门阅读

  1. leetcode152 乘积最大子数组

    2024-04-26 02:50:01       40 阅读
  2. Spark调优-解决job任务运行超时或者慢的问题

    2024-04-26 02:50:01       38 阅读
  3. SQLAlchemy 2.0 中文文档翻译完成

    2024-04-26 02:50:01       29 阅读
  4. uniapp 扫码功能

    2024-04-26 02:50:01       185 阅读
  5. 【prometheus学习过程】

    2024-04-26 02:50:01       36 阅读
  6. IntelliLock.Licensing.dll在VS中的16个使用方法

    2024-04-26 02:50:01       36 阅读
  7. 【Python】模拟windows文件名排序

    2024-04-26 02:50:01       30 阅读
  8. 2024 泛娱乐企业出海音视频选型攻略

    2024-04-26 02:50:01       93 阅读