【问题标题】:How to use Try and Catch with Typescript如何在 Typescript 中使用 Try and Catch
【发布时间】:2021-07-26 10:37:27
【问题描述】:

我希望当函数 sum 的两个参数是数字时,代码成功,但是当两个参数之一不是数字时,我想抛出异常。

  const sum = (num1: number, num2: number) => {
    return num1 + num2;
  };

  try {
    typeof sum(8, 'A') === 'number';
  } catch (e) {
    console.log('the type you entered is NaN');
  }

现在作为测试,我将字符串值改为 num2,但代码运行时没有在控制台中显示异常 我的意思是它没有从 catch 块中记录“您输入的类型是 NaN”

catch (e) {
    console.log('the type you entered is NaN');
  }

当参数不是数字时,我想在控制台中记录,如何做到这一点?

【问题讨论】:

  • 我原以为这种错误会在编译器中被发现——打字稿不应该是严格输入的吗?
  • Typescript 不允许你写sum(8, 'A'),因为你明确写了两个参数都必须是数字。您的应用程序将无法编译。您甚至不会到达执行它的地步,并且可能会在控制台中引发错误。

标签: javascript typescript react-native try-catch


【解决方案1】:

Typescript 不会在运行时抛出异常,它会编译成原生 javascript。它只能显示您的类型错误并在编译期间抛出错误。 如果你想捕捉异常,你可以使用throw new Error('/*error text*/')

【讨论】:

    【解决方案2】:

    只要抛出一个新错误:

      const sum = (num1: number, num2: number) => {
        return num1 + num2;
      };
    
      try {
        if (typeof sum(8, 'A') !== 'number'){
          throw new Error('the type you entered is NaN')
        }
      } catch (e) {
        console.log(e);
      }
    

    【讨论】:

    • 1.不要将异常用作流控制。 2. 此代码不应编译。使用 TS 时,该错误应该是完全不相关的。
    • 如果你用用户输入变量 TS 替换 8,'A' 不会给你任何错误。管理转换为数字的错误可能会更好,但这是一个不同的问题。
    • 用户输入变量很可能string类型。例如,prompt 返回string | null。如果您从标准输入读取它,它应该仍然是一个字符串。传递字符串的唯一方法是故意绕过类型系统并使用any,这根本不是一个好习惯。如果您忽略类型系统,那么您当然不会因类型不匹配而出现编译错误。我的建议是正确使用 TS 而不是错误地使用 TS。那么你就不会有问题了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多