脚手架中会抛出这样一个小问题

问题遇到的现象和发生背景

img


img

问题相关代码,请勿粘贴截图
运行结果及报错内容

是我哪里写错了吗?子组件警告一个错误

我的解答思路和尝试过的方法

计算属性用完整写法就没有这个警告

我想要达到的结果

怎么消除这个警告

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文档
  };
}