【问题标题】:How would you write this function in typescript?你会如何用打字稿写这个函数?
【发布时间】:2021-10-28 14:57:17
【问题描述】:

我喜欢为我的应用程序(react、typescript)编写很多辅助函数。我总是在两点上产生矛盾。我将在下面提供我的一个函数,但是这两点在我编写的大多数函数中都非常一致。

  1. 返回什么“类型”?
  2. 我应该检查参数的类型吗?

这是我的功能之一

interface replacementMap {
  key: string,
  value: string
} // ex [{key: '[last]', value: 'Washington'}, {key: '[first]', value: 'George'}]

type templateString = string // ex `[last], [first]`

const replaceStringsInTemplate = (m: Array<replacementMap>, t: templateString): (string | null) => {
  // Should I do checks like this?  I usually do, but is it a waste of time or is
  // there a better way to do it?
  if (typeof t !== 'string') return null
  if (!Array.isArray(m)) return null
  
  let rtn = t;

  m.forEach((v) => {
    rtn = rtn.split(v.key).join(m.value)
  }
  return rtn;
}

我在代码中的 cmets 中包含了我的问题,但总体而言,对上述函数中的参数类型进行短路检查是一种很好的做法。或者它们不是必需的,因为如果消费者尝试使用不正确类型的函数,打字稿应该会抛出错误?

另外,如果类型检查失败,我应该返回什么。返回一个空字符串感觉有点不对,所以我返回null。

【问题讨论】:

  • 我认为如果你有类型参数,你不需要在运行时检查类型。可以在您的库文档中指定如果使用了不正确的类型,则会导致未定义的行为。此外,您不必为 lambda 指定任何返回类型。 Typescript 能够自动推断 lambda 返回类型。 [免责声明:我自己的意见]
  • 如果您确实进行了类型检查(如果您确实想付出额外的努力,这当然不是一件坏事),请不要返回任何内容。改为使用TypeError

标签: javascript typescript functional-programming typechecking


【解决方案1】:

你根本不需要检查,这不是标准做法,除非你的参数是任何类型的

【讨论】:

    猜你喜欢
    • 2018-09-06
    • 2023-03-16
    • 2014-07-07
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2018-09-18
    相关资源
    最近更新 更多