【问题标题】:How to rebuild a function with three parameters to one?如何将具有三个参数的函数重建为一个?
【发布时间】:2022-07-13 00:43:29
【问题描述】:

我这里有一段代码 getIsoDate 可以完全按照我的意愿工作。但后来我需要将它作为一个参数进一步传递,而不是像现在这样的三个参数(日、月、年)。 这就是为什么我得到错误 - 预期 3 个参数,但得到 1.ts(2554)

因此,为了消除错误,我需要重建 getIsoDate 它有一个参数但功能相同,我正在努力理解如何实现这一点,摆脱日、月、年并只使用一个值?还是有其他方法?你能给我一个提示或提示如何开始吗?

const getIsoDate = (day: string, month: string, year: string) => {
  if (day && year && month && parseInt(year) > 999)
    return new Date(`${year}-${month}-${day}T12:00:00`).toISOString();
  else if (!day && !month && (!year || parseInt(year) < 1000)) return undefined;
  else return "Invalid Date";

【问题讨论】:

  • 单个参数的含义是什么?它如何定义日期?
  • 一个论点是什么?一个东西?您需要两个版本,例如,一个对象三个参数?
  • 我有三个具有字符串类型的参数,我只需要传递一个参数,例如 fullDate 作为字符串。
  • @Figario JS/TS 不擅长以这种方式重载函数。 可行 (a) 将 month/year 标记为可选,并且 (b) 检查 day 以猜测您想要哪种形式 - 这不利于某些 TS 优势。

标签: javascript typescript


【解决方案1】:

如果你传入一个带有相应键的对象,你可以像这样destructure 参数:

const getIsoDate = ({ day, month, year}) => {
  if (day && year && month && parseInt(year) > 999)
    return new Date(`${year}-${month}-${day}T12:00:00`).toISOString();
  else if (!day && !month && (!year || parseInt(year) < 1000)) return undefined;
  else return "Invalid Date";
}

// exmaple usage
const someDate = { day: '25', month: '04', year: '2022' }
console.log(getIsoDate(someDate))

【讨论】:

  • 谢谢,我需要阅读解构我没有考虑过这种方法。
【解决方案2】:

您需要一个中间步骤,首先写入值并说出它是什么类型(包含 3 个字符串的数组)。在下一行你可以解构。 见这里:

const getIsoDate = (values: [string, string, string]) => {
  const [day, month, year] = values;
  if (day && year && month && parseInt(year) > 999)
    return new Date(`${year}-${month}-${day}T12:00:00`).toISOString();
  else if (!day && !month && (!year || parseInt(year) < 1000)) return undefined;
  else return "Invalid Date";
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2020-08-11
    相关资源
    最近更新 更多