vue 3 + TS 组合式标注类型

server/2024/9/24 11:00:11/

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>

http://www.ppmy.cn/server/13873.html

相关文章

测试用例设计方法-异常测试

飞的最高的海鸥&#xff0c;能看到最远的奇景。大家好&#xff0c;继续给大家分享如何进行异常测试&#xff0c;首先要做好异常测试&#xff0c;需要我们对被测系统进行全面的了解&#xff0c;熟悉被测系统的功能、架构和运行机制&#xff0c;然后在这个基础上尽可能覆盖各种的…

K8s: 在Pod中使用亲和性调度节点

用节点亲和性把 Pods 分配到节点 在 K8s 集群中&#xff0c;如何使用节点亲和性把 Pod 分配到特定节点机器资源各不相同&#xff0c;配置不同&#xff0c;一些应用对配置有要求的需要部署到相关机器上应用场景 场景1: 对读写性能要求较高的pod部署到安装ssd的机器上场景2: 把同…

嵌入式开发中模板方法模式实现

模板方法模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它在父类中定义了一个算法的框架&#xff0c;允许子类在不改变结构的情况下重写某些步骤。这种模式体现了“封装不变部分&#xff0c;扩展可变部分”的原则&#xff…

ZeRO论文阅读

一.前情提要 1.本文理论为主&#xff0c;并且仅为个人理解&#xff0c;能力一般&#xff0c;不喜勿喷 2.本文理论知识较为成体系 3.如有需要&#xff0c;以下是原文&#xff0c;更为完备 Zero 论文精读【论文精读】_哔哩哔哩_bilibili 二.正文 1.前言 ①为什么用该技术&…

JRT多服务器同步程序

之前的JRT只部署在一个服务器&#xff0c;实际运用可能会有数台、数十台、或者更多服务器。那么多台服务器就需要程序同步机制。这里借助Rsync同步&#xff0c;但是有个问题是Rsync同步jar之后他不知道是否需要重启站点&#xff0c;为此实现java控制台驱动Rsync&#xff0c;重定…

解决“ImportError: DLL load failed while importing _rust: 找不到指定的程序的问题

运行 scrapy startproject wikiSpider 报错&#xff1a;ImportError: DLL load failed while importing _rust: 找不到指定的程序。 经过尝试 可以更换Python解释器版本来解决 1、点击crtlalts打开设置 点击项目>解释器 选择3.11解释器 &#xff08;我原来报错用的3.9的解…

【MySQL 所遇问题】

【MySQL 所遇问题】 总结&#xff1a;Error Code: 1064.You have an error in your SQL syntax报错解释1&#xff1a;报错解释2处理过程 Error Code&#xff1a;1366 - Incorrect string value:报错解释处理过程 总结&#xff1a; Error Code: 1064 不可见字符。 某些文本处理…

力扣HOT100 - 104. 二叉树的最大深度

解题思路&#xff1a; class Solution {public int maxDepth(TreeNode root) {if (root null) return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;} }