如何在打字稿中实现自定义错误类?

时间:2019-06-03 09:54:35

标签: javascript typescript

我从事Swift开发已经有3年了,最近改用打字稿。

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

在JavaScript中,有任何错误。

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

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)
    new errorController(401, 'Authentication required.', res)
}

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

3 个答案:

答案 0 :(得分:1)

  

任何类型都是我们在编写时都不知道的变量类型   一个应用程序。这些值可能来自动态内容,例如从   用户或第三方库。在这些情况下,我们要选择退出   类型检查,并让值通过编译时检查。至   为此,我们将它们标记为任何类型。

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

您可以扩展打字稿中的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
    }

请参见Reference

答案 1 :(得分:1)

https://basarat.gitbooks.io/typescript/docs/types/exceptions.html中所述,您可以抛出类似new Error()的东西(以及其他任何东西,因为它将在最后被编译为javascirpt)

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

         export class MySpecificError extends Error

您可以抛出方法并陷入catch条款中 但这仅适用于您自己编写的代码

答案 2 :(得分:0)

那是因为您可以with Ada.Text_IO ; use Ada.Text_IO; procedure Main is task type test1 is entry start; end test1; task body test1 is begin accept start; Put_Line("Haha"); end test1; t1 : test1; N : Integer := 10; begin while N /= 0 loop t1.start; N := N - 1; end loop; end Main; 用JavaScript进行任何操作:

throw

由于任何深层嵌套的代码都可能在某处扔东西,因此Typescript无法正确键入它,这就是“错误”具有 throw 1; 类型的原因。

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

any