我正在使用TypeScript进行一个相当大的项目,我想知道使用Errors的标准是什么。例如,我在Java中抛出了一个索引越界异常:
Error
throw new IndexOutOfBoundsException();
在TypeScript中等价的语句是:
throw new Error("Index Out of Bounds");
还有什么其他方法可以实现这个目标?公认的标准是什么?
JavaScript中超出范围的约定是使用RangeError。要检查类型,请使用if / else + instanceof从最特定的最泛型开始
RangeError
instanceof
try { throw new RangeError(); } catch (e){ if (e instanceof RangeError){ console.log('out of range'); } else { throw; } }
有人在评论中发布了这个MDN的链接,我认为这很有帮助。它非常全面地描述了ErrorTypes之类的东西。
EvalError——创建一个实例,表示关于全局函数eval()发生的错误。 InternalError——创建一个实例,表示抛出JavaScript引擎内部错误时发生的错误。如。 "too much recursion". . RangeError——创建一个实例,表示数值变量或参数超出有效值时发生的错误 范围。< / p > ReferenceError——创建一个实例,表示取消引用无效引用时发生的错误。 SyntaxError——创建一个实例,表示在eval()中解析代码时发生的语法错误。 TypeError——创建一个实例,表示当变量或参数不是有效类型时发生的错误。 URIError——创建一个实例,表示当encodeURI()或decodeURI()被传递无效参数时发生的错误。
EvalError——创建一个实例,表示关于全局函数eval()发生的错误。
InternalError——创建一个实例,表示抛出JavaScript引擎内部错误时发生的错误。如。 "too much recursion".
RangeError——创建一个实例,表示数值变量或参数超出有效值时发生的错误 范围。< / p >
ReferenceError——创建一个实例,表示取消引用无效引用时发生的错误。
SyntaxError——创建一个实例,表示在eval()中解析代码时发生的语法错误。
TypeError——创建一个实例,表示当变量或参数不是有效类型时发生的错误。
URIError——创建一个实例,表示当encodeURI()或decodeURI()被传递无效参数时发生的错误。
通过异常发出和显示消息的简单解决方案。
try { throw new TypeError("Error message"); } catch (e){ console.log((<Error>e).message);//conversion to Error type }
如果我们不知道可以从块中发出什么样的错误,上面不是一个解决方案。在这种情况下,应该使用类型保护,并对适当的错误进行适当的处理-看看@Moriarty的回答。
不要忘记switch语句:
default
constructor
function handleError() { try { throw new RangeError(); } catch (e) { switch (e.constructor) { case Error: return console.log('generic'); case RangeError: return console.log('range'); default: return console.log('unknown'); } } } handleError();