在查阅官方文档时注意到 props 类型检查这一章节。
https://cn.vuejs.org/guide/components/props.html#prop-validation
此时按照官方的说法
不会有这样的问题吗?
const props=defineProps({
name:Array
});
props.name instanceof Array // true
props.name instanceof Object // true
在查阅官方文档时注意到 props 类型检查这一章节。
https://cn.vuejs.org/guide/components/props.html#prop-validation
此时按照官方的说法
不会有这样的问题吗?
const props=defineProps({
name:Array
});
props.name instanceof Array // true
props.name instanceof Object // true
在Vue 3中,使用defineProps
函数定义props时,使用instanceof
进行类型检查是不会有问题的。
这是因为defineProps
函数返回的对象中,每个prop都是一个具有特定类型(例如Array或String等)的属性,因此您可以放心地使用instanceof
运算符来检查prop的类型。
例如,以下代码段演示了如何使用instanceof
来检查props.name
是否为Array类型:
const props = defineProps({
name: Array
});
if (props.name instanceof Array) {
console.log('props.name is an instance of Array');
} else {
console.log('props.name is not an instance of Array');
}
在此代码段中,如果传递给prop的值为数组,则控制台将打印出“props.name is an instance of Array”。否则,它将打印出“props.name is not an instance of Array”。
此外,您还可以使用其他方法来检查prop的类型,例如使用Array的isArray
方法:
const props = defineProps({
name: Array
});
Array.isArray(props.name) // true
总之,在Vue 3中,使用defineProps
定义的props类型是可靠的,并且可以使用常规的类型检查方法来验证它们。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
不能说毫无风险。
但风险并不在于你说的这一点,你列举的这一类问题会在框架层面得到解决,不会把烂摊子留给开发者。亲手实现过深度拷贝的人大抵都知道必须先检测是否为
RegExp
、Array
、Date
等内置对象,确定不是这些对之后,才能按照Object
来处理,框架的解决方案应该与此类似。incetanceof
检测存在的可能风险在于 JS 写法过于灵活,以至于子类属性与超类的同名属性可以不兼容,incetanceof
并不能检测出这种改动:对 JS 而言,这种问题是无解的,因为这种改动难以约束,也那一检测,因此避免这种问题,只能指望开发者自己不要乱来。