当 Typescript 不允许你强制执行函数时,你如何表示没有为某些值定义函数?



假设我想用Typescript实现一个函数mean,该函数计算numbers数组的平均值。

既然强制数组为非空是很尴尬的,那么我应该如何与mean的用户沟通它不是为空数组定义的?

我看到的选项是:

  1. 返回NaN

这似乎是NaN适用的情况,但我讨厌寻找NaNs的来源。因此,关于出了什么问题的信息很少。仅运行时。

  1. 返回undefined(将类型更改为(nums: number[]) => number | undefined(

不太好,但似乎比1好得多。因为这个类型说可能出了问题。它没有说明为什么如何

  1. 投掷

关于哪里出了问题的很好的描述性信息。将调用方与实现耦合。

  1. 返回undefined并记录错误消息

这将组合来自2的类型中的信息。3.中有很好的描述,但对于一个不介意获得undefineds的来电者来说,这真的很烦人。

有比这些更好的方法吗?

您应该通过正确定义类型来与用户进行通信,这样它就会类似于:

function mean(values: [number, ...number[]]): number

我看不出这样定义函数有任何缺点,或者至少比在运行时捕捉错误有更少的缺点。

如果你真的不想这样做,那么你需要决定如果用户传入一个零长度的数组,他们应该如何表现。

如果这是一个灾难性的失败,那么抛出一个错误。如果这是预期的,并且他们需要处理它,那么更改返回类型。除了返回元组之外,您已经介绍了大多数可能性。你可以退回类似的东西

type Value = { err: false; value: number } & { err: true; msg: string }

这将迫使呼叫者检查是否存在问题。

最新更新