You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:24:46