如何使函数明确表示它会在 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 标签。以上仍然适用于 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);
};
这是来自 TypeScript playground 的屏幕截图,显示了如果您将鼠标悬停在它(或类似的)上,一个体面的 IDE 将如何显示该功能:
我想让我的函数明确表示它会抛出错误。
例如;
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 标签。以上仍然适用于 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);
};
这是来自 TypeScript playground 的屏幕截图,显示了如果您将鼠标悬停在它(或类似的)上,一个体面的 IDE 将如何显示该功能: