TypeScript中never[]赋值给any[]报错原因及快速解决办法是什么?

摘要:never[]类型的说明 在TS中,空数组[]如果没有上下文类型,会被推断为never[]类型。 因为在TS中,数组类型是可变元组,而空数组在没有其他信息的情况下,无法确定其元素类型。 因此TS会将其推断为never[],表示这个数组不可能
never[]类型的说明 在TS中,空数组[]如果没有上下文类型,会被推断为never[]类型。 因为在TS中,数组类型是可变元组,而空数组在没有其他信息的情况下,无法确定其元素类型。 因此TS会将其推断为never[],表示这个数组不可能有元素(因为never类型表示不可能存在的类型)。 下面的情况会被推断为 never[]类型 // 情况1:空数组字面量 const arr = [] // TypeScript 推断为 never[] // 情况2:空数组作为对象属性 const obj = { items: [] // items 被推断为 never[] } // 情况3:在函数内部 function test() { const arr = [] // 推断为 never[] return arr // 返回类型 never[] } const personObj = reactive({ likeArr: [] // 推断为:never[]类型 }) const personObj = ref({ serviceAndDimensionData: [], // 推断为:never[]类型 }) 下面的情况会被推断为 any[]类型 从any类型的值中取数组时。你可以看你取值的对象是否any类型的。 any[]不能赋值给never[] never类型表示不可能存在的类型 never[]赋值给any[]报错的快速解决办法 const personObj = ref({ serviceAndDimensionData: [] as any[], // 将 never[]类型变成any[]类型 }) 这样网络请求返回来的数据赋值给never[]类型时就不会报错了。 最好的解决解决办法还是要在声明变量的时候声明数据类型哈。