TypeScript报错:算术操作左侧需为指定类型,数组按日期排序问题
解决TypeScript日期排序类型错误问题
问题原因
TypeScript抛出该错误的核心原因:
chartArray未指定明确类型,默认被推断为any[],TypeScript无法确认a.date、b.date是合法的日期格式,也无法判定new Date(a.date)能转换为可参与算术运算的数值类型。- 虽然JavaScript中允许直接用
Date对象相减(会自动转为时间戳),但TypeScript对类型检查更严格,会质疑操作数的类型合法性。
解决方案
1. 定义明确的类型接口
先给存入数组的对象声明类型,明确date属性的格式:
interface ChartItem { date: string; // 根据实际场景调整,比如'YYYY-MM-DD'或其他合法日期字符串格式 // 补充你业务中需要的其他属性,比如播放量、热度等 }
2. 给数组指定类型
将chartArray声明为ChartItem[],替代默认的空数组推断:
const chartArray: ChartItem[] = [];
3. 优化排序逻辑(严谨性提升)
用getTime()方法明确获取时间戳的数值类型,让TypeScript清晰识别操作数类型,彻底消除报错:
chartArray.sort((a, b) => { const dateA = new Date(a.date).getTime(); const dateB = new Date(b.date).getTime(); return dateA - dateB; });
完整修正后代码
interface ChartItem { date: string; // 补充实际业务所需的其他属性 } const chartArray: ChartItem[] = []; for (let i of Object.keys(data.data.podcasts.data[0].attributes.podcast_popularities.data)) { chartArray.push(data.data.products.data[0].attributes.products.data[i].attributes); } // 循环结束后统一排序(比每次push后排序更高效) chartArray.sort((a, b) => { const dateA = new Date(a.date).getTime(); const dateB = new Date(b.date).getTime(); return dateA - dateB; });
内容的提问来源于stack exchange,提问作者Navro
相关产品推荐
相关产品推荐

