【问题标题】:Why do I receive "Argument of type 'Date' is not assignable to parameter of type 'string | number'" when creating a date with a date object?为什么在使用日期对象创建日期时收到“'日期'类型的参数不可分配给'字符串|数字'类型的参数”?
【发布时间】:2019-07-03 04:47:53
【问题描述】:

我有一个将日期对象作为参数的函数。此函数返回不同的日期。

function makeDate(date:Date) {
  return new Date(date); //<--error here
}
const newDate = new Date(); //
console.log(makeDate(newDate)); // Returns date object just fine

Vscode 中的 Typescript 显示以下错误:

“'Date' 类型的参数不能分配给'string | number' 类型的参数。”

虽然官方文档声明 Date 构造函数可以接受一个数字(毫秒)、一个字符串(日期字符串),但创建日期对象似乎没有问题通过传递另一个日期对象日期构造函数。因此,我希望不会收到任何错误。

我已经用谷歌搜索了这个结果,但我发现的 SO 和 Github 问题似乎没有回答这个问题或解释这个问题(或者至少我不理解与我的示例相关的解释)。

我应该得到这个错误吗?有没有办法解决它?

谢谢!

【问题讨论】:

  • Date 构造函数将对象参数强制为原语,TypeScript 不喜欢这样。您也可以将 Date 实例传递给 parseInt 并且它“有效” - 但这是 TypeScript 试图避免的那种代码。

标签: javascript typescript date


【解决方案1】:

因为构造函数需要一个字符串或一个数字,所以使用 getTime 会修复它

function makeDate(date:Date) {
  return new Date(date.getTime()); //<--error here
}
const newDate = new Date(); //
console.log(makeDate(newDate)); // Returns date object just fine

【讨论】:

  • new Date(+date)。 ;-)
  • @RobG 谢谢!使用日期对象创建日期是不好的做法吗?
  • 并非如此,但如果 TypeScript 签名需要一个数字或一个字符串,那么您需要这样做以使其满意。如果你传入一个日期,那么它将在内部使用时间来构造一个日期对象的新实例,所以你也可以遵循 TS 定义。
  • @AdrianBrand 谢谢!
  • @Brandon——曾几何时,但不是现在。使用一元 + 以比 .getTime() 更少的代码强制日期转为数字。
猜你喜欢
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2017-09-28
  • 2023-01-11
相关资源
最近更新 更多