我有一个显示文本和图像或彩色圆圈的组件,如下所示:
当前组件的props看起来像这样:
<script lang="ts" setup>
// Props
interface Props {
title: string
imagePath?: string # String path to an image asset
color?: `#${string}` # String starting with a Hash, such as #16A2B0
}
const props = defineProps<Props>()
[...]
</script>
当使用带有颜色的组件时,它看起来像这样:
<MyComponent color="#DEDEDE"/>
当使用带有图像路径的组件时,它看起来像这样:
<MyComponent image-path="src/assets/image.png" />
现在,我有它,所以color
prop和imagePath
prop都是可选的,因为从来没有一种情况下,你会需要两个。然而,这允许用户也不提供任何内容,这也是不期望的。
有没有一种方法可以在Typescript中使用Vue 3 Composition API,我可以指定对于这个组件,你需要一个color
prop或一个imagePath
prop,你不需要两者,只有一个或另一个,你不能两者都有?
1条答案
按热度按时间wmtdaxz31#
Vuejs为每个prop提供了一个自定义验证器。但不幸的是,它缺乏访问验证器中其他 prop 的能力。你可以看到the issue here。
所以恐怕没有直接的方法来解决你的问题。但有两种解决方法可供选择:
1.创建一个监视器来监视你的 prop ,如果不满足条件就抛出警告
1.将你的props作为一个单独的对象传递,然后你可以在一个验证器上验证整个props