当前位置: 首页 > 知识库问答 >
问题:

TypeScript与Try/Catch中的错误

孔君浩
2023-03-14

我应该如何在TypeScript中使用Try/Catch?我不希望它检查给定块中的任何错误,因为我已经检查了它们(错误是预期的,状态由catch控制)。

我将代码包装在Try/Catch中(仅为示例):

try {
    let data = localStorage.getItem('something');
    // Err. TS2345; I know, that's why you're in the try block
    data = JSON.parse(data);
    // Err. TS2531; I know, that's why you're in the try block
    data.exp = new Date(data.exp * 1000);
    return data;
} catch {
    return null;
}

TypeScript拒绝编译它。有没有办法告诉TypeScript我知道这个错误,并且我可以接受?我不想在每一行上都使用忽略(假设我可以有更长的代码),也不想关闭严格模式。有没有更好的解决方案?

共有1个答案

方昊英
2023-03-14

TypeScript的目的是帮助您解决由类型问题引起的编码错误。它为您提供TS2345,因为您将string|null传递到JSON. parse(它只期望string),它为您提供TS2531和TS2339,因为您的代码使用data,好像它不会是null(但它很可能是)并且好像它有一个exp属性(据TypeScript所知,它没有)。

如果要禁用数据的类型检查,请使用任意类型:

try {
    let data: any = localStorage.getItem('something');
//          ^^^^^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− here
    data = JSON.parse(data);
    data.exp = new Date(data.exp * 1000);
    return data;
} catch {
    return null;
}

从链接的留档:

任何

TypeScript还有一个特殊类型,即any,您可以在不希望某个特定值导致类型检查错误时使用它。

 类似资料:
  • 不管你多么精通编程,有时我们的脚本总还是会出现错误。可能是因为我们的编写出错,或是与预期不同的用户输入,或是错误的服务端响应以及其他数千种原因。 通常,如果发生错误,脚本就会“死亡”(立即停止),并在控制台将错误打印出来。 但是有一种语法结构 try..catch,它使我们可以“捕获(catch)”错误,因此脚本可以执行更合理的操作,而不是死掉。 “try…catch” 语法 try..catch

  • 这是我的脚本,它返回一个布尔值 我希望脚本打印捕获的异常,并返回布尔值,但在本例中,脚本失败时只返回false。感谢您的帮助,我需要打印异常,就像try-catch块不存在一样。

  • 我需要在我的存储过程中添加错误处理。我相信当只有一个insert语句时,通常不需要使用BEGIN TRAN/COMMIT TRAN。还有使用SET XACT_ABORT,NOCOUNT ON语句的意义是什么。请给出最佳/标准的方法将错误处理添加到下面的SP中。如果出现错误,我还需要在catch段中调用dbo.usp_get_error_info。请建议。

  • 我们在SQL Server存储过程中使用以下错误处理模式: 但是当存储过程中出现以下错误时,try/catch块不起作用。 错误详细信息:存储过程试图将值插入非NULL列。 在执行存储过程中,我得到了以下错误 EXECUTE之后的事务计数表示BEGIN和COMMIT语句的数量不匹配。上一个计数=1,当前计数=0。 msg 3903, Level 16, State 1, Line 30 ROLLB

  • 问题内容: 可以在Swift中捕获异常吗?给出以下代码: 是否可以防止异常导致整个程序崩溃?也就是说,Objective-C中的Swift等效于什么: 问题答案: 它没有异常处理,并且在开发人员论坛中的讨论讨论了为什么会这样: 但请记住,可可和可可触控传统上并不打算让您捕获异常。他们打算让您不要将它们放在首位。普通错误应使用可选类型和inout NSError参数处理;您应该通过编写更好的代码来解

  • 问题内容: 我们都使用多个插入查询。这样做时,应该将其放置在内部还是包裹起来?甚至有必要在交易出现问题时自动将交易失败的情况包括在内吗? 包装交易的样本: 相反,包装try … catch: 或只是一笔没有交易的交易…抓住 问题答案: 如果您需要通过代码手动“退出”交易(通过异常还是只是检查错误状态),则不应使用,而是将代码包装在and /中: 请参阅交易文档。