我正在将TypeScript用于一个相当大的项目,并且想知道使用Error
s 的标准是什么。例如,假设我在Java中将索引超出范围例外:
throw new IndexOutOfBoundsException();
TypeScript中的等效语句为:
throw new Error("Index Out of Bounds");
我还有什么其他方法可以做到这一点?公认的标准是什么?
我正在将TypeScript用于一个相当大的项目,并且想知道使用Error
s 的标准是什么。例如,假设我在Java中将索引超出范围例外:
throw new IndexOutOfBoundsException();
TypeScript中的等效语句为:
throw new Error("Index Out of Bounds");
我还有什么其他方法可以做到这一点?公认的标准是什么?
Answers:
有人在评论中将此链接发布到了MDN,我认为这非常有帮助。它非常详尽地描述了诸如ErrorTypes之类的东西。
EvalError-创建一个实例,该实例表示与全局函数eval()有关的错误。
InternalError- 创建一个实例,该实例表示在JavaScript引擎中引发内部错误时发生的错误。例如“太多的递归”。
RangeError ---创建一个实例,该实例表示当数字变量或参数超出其有效范围时发生的错误。
ReferenceError-创建一个实例,该实例表示在取消引用无效引用时发生的错误。
SyntaxError-创建一个实例,该实例表示在eval()中解析代码时发生的语法错误。
TypeError-创建一个实例,该实例表示当变量或参数不是有效类型时发生的错误。
URIError-创建一个实例,该实例表示在将encodeURI()或encodeURI()传递给无效参数时发生的错误。
JavaScript中超出范围的约定使用RangeError
。要检查类型,请使用是否/ else + instanceof
从最具体到最通用
try {
throw new RangeError();
}
catch (e){
if(e instanceof RangeError){
console.log('out of range');
}
}
else { throw; }
此处添加
通过Exception发出和显示消息的简单解决方案。
try {
throw new TypeError("Error message");
}
catch (e){
console.log((<Error>e).message);//conversion to Error type
}
如果我们不知道从块中发出什么样的错误,上述方法不是解决方案。在这种情况下,应使用类型防护措施,并应进行适当的处理以解决适当的错误-查看@Moriarty答案。
<Error>
是告诉TS编译器e
这里的类型,<Error>
以便您具有(1)intellisense和(2)更好的类型检查。请注意,尽管任何类型转换都根本不会转换为JS,并且纯粹是语法糖。
不要忘了switch语句:
default
。instanceof
可以匹配超类。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();
RangeError
。您应该定义自定义类型还是throw new Error("<message>");
?