是我哪里写错了吗?子组件警告一个错误
计算属性用完整写法就没有这个警告
怎么消除这个警告
ts 得警告 ,
Property 'length' does not exist on type 'string | number'.(注释:"属性“length”在类型“xxx | xxx”上不存在。")
https://www.jianshu.com/p/1b8cdbd2e81c
可能是子组件还没就收到父组件传过来的值就调用了计算函数,可以在计算函数内打印一下lists是否有值
props:{
lists:{
type:Array;
default:[];
}
}
传递lists的时候指定default:[]默认类型数组
在执行computed的时候,props里面的值还没有流进来
方法一
lists: {
type: Array,
// 与对象或数组的默认值不同,这不是一个工厂函数——这是一个用作默认值的函数
default() {
return []
}
}
方法二
computed:{
long(){
return this.lists&&this.lists.length
}
)
我的建议是不用改,也不用管。
这个是vetur插件的ts类型检查,this.lists会被检测成any(即任意类型)当然就没有数组类型的length属性。
如果你vue使用ts的话,你可以用as指定this.lists为数组类型这样就不会报错了。
但是我看你的代码用的应该是js,js本来就是弱类型,让他提示就好了。
顺带一提prop尽量别写的这么简单,写的详细一点,最起码把类型写上
lists:{
type:Array;
default:()=>{
return []//这里默认值要return出来,有几个回答直接写的default:[]是错的,详见vue文档
};
}