Javascript 如何在typescript中实现自定义错误类?

Javascript 如何在typescript中实现自定义错误类?,javascript,typescript,Javascript,Typescript,在过去的三年里,我一直在做快速开发,最近我改用打字 在Swift中,一个类型为NSError的错误,它为我们提供了一些属性 在JavaScript中,错误是任意的 为什么错误是有意义的?如何创建具有某些属性的自定义类并在整个项目中使用它 试试看{ const decodedResult=解码(令牌) //在要在模型中使用的标题中添加userId。 req.headers.userId=decodedResult.paylod.id 下一个() }捕获(错误){ console.log(错误) 新

在过去的三年里,我一直在做快速开发,最近我改用打字

在Swift中,一个类型为NSError的错误,它为我们提供了一些属性

在JavaScript中,错误是任意的

为什么错误是有意义的?如何创建具有某些属性的自定义类并在整个项目中使用它

试试看{
const decodedResult=解码(令牌)
//在要在模型中使用的标题中添加userId。
req.headers.userId=decodedResult.paylod.id
下一个()
}捕获(错误){
console.log(错误)
新errorController(401,“需要身份验证”,res)
}

现在这里的错误对象是any类型。我希望它是强类型的。

这是因为您可以
抛出Javascript中的任何内容:

  throw 1;
由于任何深度嵌套的代码都可能在某个地方抛出某些东西,Typescript不可能正确地键入它,这就是为什么“error”具有
any
类型

但是,Typeguards可帮助您缩小特定错误类型的范围:

  class CustomError extends Error {
    constructor(code: number, message: string) {
       super(message);
       this.code = code;
    }
 }

 try {
   throw new CustomError(404, "Not Found");
 } catch(error) {
  if(!(error instanceof CustomError))
    throw error;

  console.log(error.code); // correctly typed here
 }
Any是我们在编写时不知道的变量类型 申请书。这些值可能来自动态内容,例如 用户或第三方库。在这些情况下,我们希望选择退出 类型检查并让值通过编译时检查。到 若要这样做,我们会给它们贴上任何类型的标签

您可以在typescript中扩展
Error
类来创建自定义错误处理程序

 class MyError extends Error {
        constructor(m: string) {
            super(m);
}

        anyFunction() {
            return "Hello World " ;
        }
    }


    try {
        const decodedResult = decode(token)
        // Adding userId in the headers to use in the models.
        req.headers.userId = decodedResult.paylod.id
        next()
    } catch (error) {
        console.log(error)
        throw new MyError()  // pass arguments of constructor if any
    }
请参见中提到的,您可以抛出类似
newerror()
(以及任何其他内容,因为它将在最后传输到javascirpt中)

因此,您可以创建一个新类,例如

         export class MySpecificError extends Error
您可以在方法中加入catch,并在
catch
子句中使用catch 但是,这只适用于您自己编写的代码

可能重复的代码
         export class MySpecificError extends Error