找回密码
 立即注册
首页 业界区 安全 TypeScript中never[]赋值给any[]报错的原因分析以及快速 ...

TypeScript中never[]赋值给any[]报错的原因分析以及快速解决办法

颜才 昨天 23:00
never[]类型的说明

在TS中,空数组[]如果没有上下文类型,会被推断为never[]类型。
因为在TS中,数组类型是可变元组,而空数组在没有其他信息的情况下,无法确定其元素类型。
因此TS会将其推断为never[],表示这个数组不可能有元素(因为never类型表示不可能存在的类型)。
下面的情况会被推断为 never[]类型
  1. // 情况1:空数组字面量
  2. const arr = []  // TypeScript 推断为 never[]
  3. // 情况2:空数组作为对象属性
  4. const obj = {
  5.   items: []  // items 被推断为 never[]
  6. }
  7. // 情况3:在函数内部
  8. function test() {
  9.   const arr = []  // 推断为 never[]
  10.   return arr  // 返回类型 never[]
  11. }
复制代码
  1. const personObj = reactive({
  2.   likeArr: [] // 推断为:never[]类型
  3. })
复制代码
  1. const personObj = ref({
  2.   serviceAndDimensionData: [], // 推断为:never[]类型
  3. })
复制代码
下面的情况会被推断为 any[]类型

从any类型的值中取数组时。你可以看你取值的对象是否any类型的。
any[]不能赋值给never[]

never类型表示不可能存在的类型

never[]赋值给any[]报错的快速解决办法
  1. const personObj = ref({
  2.   serviceAndDimensionData: [] as any[], // 将 never[]类型变成any[]类型
  3. })
复制代码
这样网络请求返回来的数据赋值给never[]类型时就不会报错了。
最好的解决解决办法还是要在声明变量的时候声明数据类型哈。
                                                                                                                               
1.jpeg
                                                微信                                                                                                本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
                        如果文中有什么错误,欢迎指出。以免更多的人被误导。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册