【发布时间】:2021-10-28 14:57:17
【问题描述】:
我喜欢为我的应用程序(react、typescript)编写很多辅助函数。我总是在两点上产生矛盾。我将在下面提供我的一个函数,但是这两点在我编写的大多数函数中都非常一致。
- 返回什么“类型”?
- 我应该检查参数的类型吗?
这是我的功能之一
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