解决常见的VUE,TS编写容易出错的报错点Vue: Argument of type{xxx}is not assignable to parameter of type never

该文章已生成可运行项目,

目录

问题发现

问题原因 

解决方法

总结 


问题发现

很多人,或者跟我一样的学习vue的应该会经常出现这个错误,但是不知道怎么解决。

例如当天编写了这一段程序代码


let s_name=ref('')
let goodsprice = ref(0)
let quantity = ref(0)
let discount = ref(0)
let goods_list = ref([])



let goodprice = computed(()=>{
  return goodsprice.value*quantity.value-discount.value
})

function addToCart(){
  goods_list.value.push({
    name:s_name.value,
    goodsprice:goodsprice.value,
    quantity:quantity.value,
    discount:discount.value,
    price:goodprice.value,
  })
  s_name.value=''
  goodsprice.value=0
  quantity.value=0
  discount.value=0
}

刚开始能运行好好的,当我关闭编程软件,再次打开的时候就会发现,出现以下红色波浪线提示错误。

 

问题原因 

报错提示:你正在尝试将一个对象添加到一个类型为 never[] 的数组中,而 never 类型的数组是不能被赋值或添加任何元素的。

错误原因是 goods_list 被推导为 Ref<never[]>,即没有显式声明 goods_list 的类型,TypeScript 推断它是一个 Ref<never[]>,这个数组的元素类型是 never。你试图向一个 never[] 类型的数组中添加一个对象,TypeScript 就会报错,因为 never 是不可赋值的类型。

解决方法

需要为 goods_list 显式声明一个类型,即创建接口,并声明类型

interface GoodItem {
  name: string
  goodsprice: number
  quantity: number
  discount: number
  price: number
}

let goods_list = ref<GoodItem[]>([])

或者使用类型推导的方式初始化

let goods_list = ref([
  {
    name: '',
    goodsprice: 0,
    quantity: 0,
    discount: 0,
    price: 0
  }
])

当我们使用以上两种方式就可解决该报错问题

总结 

这个问题是很容易出现的,平常编写的时候并没有那么容易发现,因为当时编写的时候不会出现提示报错,等关闭打开程序编写的时候就会出现该问题,这时候需要平常要多注意这个问题。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值