Exception 正确使用错误

Exception 正确使用错误,exception,typescript,Exception,Typescript,我正在为一个相当大的项目使用TypeScript,我想知道Errors的使用标准是什么。例如,假设我在Java中提交了一个索引越界异常: throw new IndexOutOfBoundsException(); TypeScript中的等效语句是否为: throw new Error("Index Out of Bounds"); 我还有什么其他方法可以做到这一点?什么是公认的标准?JavaScript中超出范围的约定是使用RangeError。要检查类型,请使用if/else+inst

我正在为一个相当大的项目使用TypeScript,我想知道
Error
s的使用标准是什么。例如,假设我在Java中提交了一个索引越界异常:

throw new IndexOutOfBoundsException();
TypeScript中的等效语句是否为:

throw new Error("Index Out of Bounds");

我还有什么其他方法可以做到这一点?什么是公认的标准?

JavaScript中超出范围的约定是使用
RangeError
。要检查类型,请使用if/else+
instanceof
从最特定于最通用的

try {
    throw new RangeError();
}
catch (e){
    if (e instanceof RangeError){
        console.log('out of range');
    } else { 
        throw; 
    }
}
。它非常全面地描述了错误类型之类的事情

EvalError——创建一个实例,表示全局函数eval()发生的错误

InternalError——创建一个实例,表示在JavaScript引擎中抛出内部错误时发生的错误。例如。 “太多递归”

RangeError——创建一个实例,表示数值变量或参数超出其有效范围时发生的错误 射程

ReferenceError——创建一个实例,表示取消引用无效引用时发生的错误

SyntaxError——创建一个实例,表示在eval()中解析代码时发生的语法错误

TypeError——创建一个实例,表示变量或参数类型无效时发生的错误

URIError——创建一个实例,表示在向encodeURI()或decodeURI()传递无效参数时发生的错误


通过异常发出和显示消息的简单解决方案

try {
  throw new TypeError("Error message");
}
catch (e){
  console.log((<Error>e).message);//conversion to Error type
}
试试看{
抛出新类型错误(“错误消息”);
}
捕获(e){
console.log((e.message);//转换为错误类型
}
小心
如果我们不知道该块会发出什么样的错误,上述方法就不是解决方案。在这种情况下,应使用类型防护装置,并对适当的错误进行适当的处理-查看@Moriarty answer。

不要忘记开关语句:

  • 确保使用
    默认值处理
  • instanceof
    可以在超类上匹配
  • ES6
    constructor
    将匹配精确的类
  • 更容易阅读
函数handleError(){
试一试{
抛出新的RangeError();
}
捕获(e){
开关(如构造函数){
案例错误:返回console.log('generic');
案例范围错误:返回console.log('range');
默认值:return console.log('unknown');
}
}
}

handleError()一般错误怎么办?和/或内置JS错误类的列表在哪里?Mozilla开发者网络上有JavaScript错误类型和其他信息的列表:@basarat我认为您应该在这里添加
else{throw;}
,感谢指向显式类型转换的指针。今天还没有在Typescript文档中找到这些信息,还学到了一些东西。你知道添加is的目的是什么吗?e、 消息对我来说很好。@sbattou
的唯一目的是告诉TS编译器这里的
e
类型是
,这样您就可以(1)智能感知和(2)更好的类型检查。请注意,任何类型转换都不会转换为JS,而且纯粹是语法上的糖分;似乎比其他答案更可靠、更清晰。它似乎缺少一个更通用的无效参数类型。并非所有无效参数都属于
RangeError
。您应该定义自定义类型还是只
抛出新错误(“”)?这里有7个子类,但是
Eval
Internal
Syntax
URI
绝对不适合作为开发人员编写的代码中的错误,我也不太确定
Reference
(JS中的“反引用”是什么?)。这就留下了
范围
类型
,但在代码中可能会出现无限其他类型的错误<代码>范围
回答OP的特定问题,但这是例外(抱歉),不是规则。