typescript 类型“never[]”中缺少属性“data”,但类型data product中需要该属性

envsm3lx  于 2023-02-25  发布在  TypeScript
关注(0)|答案(1)|浏览(444)

嗨,我是新的 typescript ,请如何能修复这个错误,说
类型“never[]”中缺少属性“data”,但类型“{ data:{产品:[]; };}'。
下面是代码:

let medias :[] = [];

let res :{
    data: {
        products: []
    },
} =[];

try {
    res = await axios.get('https://dummyjson.com/products?limit=10&skip=10');
    medias = res.data.products;
} catch (e) {
    medias = [];
}
qhhrdooz

qhhrdooz1#

至少存在两个问题:
1.您让TypeScript推断res的类型,但只使用[]作为products。由于TypeScript不知道元素将是什么,因此它推断never[]。此问题同时适用于resproductsmedias
1.您已经说过res类型是一个具有data属性的对象,但是您试图仅使用[]来初始化它。
相反,使用非推断类型,并明确表示数组中的类型。您也可以在axios.get中使用泛型类型参数(因为它是一个泛型方法)来表示您期望data是什么。例如,if您期望的是字符串数组:

let medias: string[] = [];
//          ^^^^^^

try {
    const res = await axios.get<{ products: string[] }>(
    //                         ^^^^^^^^^^^^^^^^^^^^^^^^
        "https://dummyjson.com/products?limit=10&skip=10"
    );
    medias = res.data.products;
} catch (e) {
    // No need for `medias = []` here, you've already done it above
}

如果您期望的是其他类型的数组,只需使用它来代替上面的string

相关问题