gpt4 book ai didi

typescript - 如何使用设置脚本、 typescript 和组合 API 在 vue 中使用验证器

转载 作者:行者123 更新时间:2023-12-03 08:10:03 26 4
gpt4 key购买 nike

我有以下来自教程的代码示例,我尝试找出如何以与示例类似的方式使用验证器,即使用脚本设置、 typescript 和组合 API。

props: {
image: {
type: String,
default: require("@/assets/default-poster.png"),
validator: propValue => {
const hasImagesDir = propValue.indexOf("@/assets/") > -1;
const listOfAvailableExt = [".jpeg", ".jpg", ".png"];
const isValidExt = listOfAvailableExt.some(ext =>
propValue.endsWith(ext)
);
return hasImagesDir && isValidExt;
}
}
}

我知道如何声明类型和默认值,但我找不到使用验证器的方法。有没有函数可以验证不同的属性?

interface Props {
image: string
}

const props = withDefaults(defineProps<Props>(), {
image: require("@/assets/default-poster.png")
});

最佳答案

<script setup> ,仅 defineProps()函数参数支持validator (截至 Vue 3.2.31)。函数参数与 props 具有相同的类型选项:

defineProps({
image: {
type: String,
default: require("@/assets/default-poster.png"),
validator: (propValue: string) => {
const hasImagesDir = propValue.indexOf("@/assets/") > -1;
const listOfAvailableExt = [".jpeg", ".jpg", ".png"];
const isValidExt = listOfAvailableExt.some(ext =>
propValue.endsWith(ext)
);
return hasImagesDir && isValidExt;
}
}
})

请注意,您不能将仅类型的 props 声明与 defineProps() 的函数参数混合在一起。 ,因此任何其他 Prop 也必须转换为选项形式。

或者,您可以实现自己的 Prop 验证:

<script setup lang="ts">
interface Props {
image: string
}

const props = withDefaults(defineProps<Props>(), {
image: require("@/assets/default-poster.png")
});

if (import.meta.env.DEV /* process.env.NODE_ENV === 'development' */) {
const isValidImage = (propValue: string) => {
const hasImagesDir = propValue.indexOf("@/assets/") > -1;
const listOfAvailableExt = [".jpeg", ".jpg", ".png"];
const isValidExt = listOfAvailableExt.some(ext =>
propValue.endsWith(ext)
);
return hasImagesDir && isValidExt;
}

if (!isValidImage(props.image)) {
console.warn(`invalid image: ${props.image}`)
}
}
</script>

关于typescript - 如何使用设置脚本、 typescript 和组合 API 在 vue 中使用验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71103028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com