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

TypeScript中如何将对象指定Date类型字段转换为数字时间戳

报错原因

你当前的写法TS只会默认返回和入参target完全一致的T类型,但你实际修改了指定字段的类型从Date转为number,类型不匹配自然会抛出赋值错误。

正确实现方案

我们需要通过TS类型体操主动定义返回值类型:将传入的keys数组对应的字段类型替换为number,其余字段保持原类型即可,完整代码如下:

// 泛型U提取为传入keys的联合类型,方便做类型映射
function objectDateToStamp<
  T extends Record<string, unknown>,
  U extends keyof T
>(target: T, keys: U[]): Omit<T, U> & Record<U, number> {
  const obj = { ...target };

  keys.forEach((key) => {
    const value = obj[key];
    if (value instanceof Date) {
      // 这里做两层断言即可解决赋值类型错误
      obj[key] = value.getTime() as unknown as T[U];
    }
  });

  // 最终返回值断言为我们构造的转换后类型
  return obj as Omit<T, U> & Record<U, number>;
}

效果验证

const formData = {
  username: "tom",
  startDate: new Date(),
  endDate: new Date(),
}

// 转换后formData的类型会自动推导为:
// { username: string, startDate: number, endDate: number }
const convertedFormData = objectDateToStamp(formData, ["startDate", "endDate"]);

额外注意

你示例代码中出现了endtDate和endDate的拼写不一致问题,实际使用时注意修正即可。

内容的提问来源于stack exchange,提问作者胡泽栋

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:57:04