TS报错Property does not exist on type 'Daily[]'解决方法
报错原因
props.weather.daily的TypeScript类型被定义为Daily[],即由Daily类型元素组成的数组。weather是单个Daily对象上的属性,不存在于数组类型本身,直接在数组上访问.weather就会触发该类型报错。
另外你当前编写的Daily接口本身存在隐性类型错误:temp和feels_like字段被错误定义为数组类型,实际这两个字段是单个对象,后续访问这两个字段的属性时也会触发类型报错。
修复方案
- 先修正
Daily接口的错误类型定义,移除temp、feels_like字段后多余的数组标记[],修正后的完整类型如下:
interface Daily { dt: number; sunrise: number; sunset: number; moonrise: number; moonset: number; moon_phase: number; temp: {day: number, eve: number, max: number, min: number, morn: number, night: number}; feels_like: {day: number, night: number, eve: number, morn: number}; pressure: number; humidity: number; dew_point: number; wind_speed: number; wind_deg: number; wind_gust: number; weather: { id: number, main: string, description: string, icon:string }[]; clouds: number; pop: number; uvi: number; } interface PropsType{ weather:{ lat: number; lon: number; timezone: string; timezone_offset: number; daily: Daily[]; } }
- 访问
weather属性时,先指定要读取daily数组中的对应元素,通过索引拿到单个Daily对象后再访问weather字段:- 读取指定日期(如第一天)的天气数据,可参考如下写法,可选链用于兜底避免接口返回空数组时触发运行时错误:
// 直接读取,无兜底 const firstDayWeather = props.weather.daily[0].weather[0] // 加可选链兜底 const safeFirstDayWeather = props.weather.daily?.[0]?.weather?.[0] - 读取所有日期的天气数据,通过数组遍历方法访问每一项即可:
props.weather.daily.forEach(dayItem => { // dayItem为单个Daily类型对象,可直接访问weather属性 const currentDayWeather = dayItem.weather[0] console.log(currentDayWeather) })
- 读取指定日期(如第一天)的天气数据,可参考如下写法,可选链用于兜底避免接口返回空数组时触发运行时错误:
内容的提问来源于stack exchange,提问作者H.b
相关产品推荐
相关产品推荐

