如何使函数明确表示它会在 JavaScript 中抛出错误?

How to make functions explicit that it would throw an Error in JavaScript?

我想让我的函数明确表示它会抛出错误。

例如;

const hexToDec = (string) => {
  if (!isHex(string)) {
    throw new Error("the given string is not hex.")
  }

  return parseInt(string, 16);
}

当我在我的 IDE 上看到这段代码时,它告诉我这段代码是 returns 字符串,但没有关于错误可能性的信息。我的团队成员可能会忘记“try - catch”。

我有一个想法,就是让这个函数async,让它returns成为一个Promise。但是,我认为应该同步此代码...

在 Java 脚本本身中,你不能,没有任何东西像你声明的 Java 的检查异常概念。

使用 JSDoc 注释,您可以注释函数以说明它抛出:

/**
 * Converts the given hex string to a number.
 *
 * @param {string} string The string to convert.
 * @returns {number} The resulting number.
 * @throws Error if `string` isn't valid hex.
 */
const hexToDec = (string) => {
    if (!isHex(string)) {
        throw new Error("the given string is not hex.");
    }

    return parseInt(string, 16);
};

My team members might forget to "try - catch".

一般来说,应该尽可能地捕获错误,通常是在环境的入口点函数中(例如,事件处理程序或主机函数回调)。您的团队成员不需要将对 hexToDec 的每次调用都包装在 try/catch 中——如果他们不确定字符串是否包含有效的十六进制,他们可以使用 isHex.异常是针对特殊情况,在您期望它有效时尝试转换字符串。

I have an idea that make this function async, so that it return a Promise. However, I think this code should be synced...

使其成为 async 不会做任何必要的检查它是否失败的事情。这只是意味着它不会抛出它会拒绝它的承诺(这是抛出的 async 版本)。


我错过了问题上的 标签。以上仍然适用于 TypeScript,但是您需要在不同的地方为参数提供类型注释(最好不要使用 string 作为参数名称,因为这是一个类型名称 [它有效,但是令人困惑]):

/**
 * Converts the given hex string to a number.
 *
 * @param str The string to convert.
 * @returns The resulting number.
 * @throws Error if `string` isn't valid hex.
 */
const hexToDec = (str: string) => {
    if (!isHex(str)) {
        throw new Error("the given string is not hex.");
    }

    return parseInt(str, 16);
};

Playground link

这是来自 TypeScript playground 的屏幕截图,显示了如果您将鼠标悬停在它(或类似的)上,一个体面的 IDE 将如何显示该功能: