首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么TypeScript没有在这里抛出错误?

TypeScript没有在这里抛出错误的原因可能有以下几点:

  1. 类型推断:TypeScript具有类型推断的能力,它可以根据变量的使用上下文推断出变量的类型。在这种情况下,TypeScript可能根据代码的上下文推断出变量的类型,并且不会抛出错误。
  2. 类型兼容性:TypeScript采用了结构类型系统,这意味着即使类型不完全匹配,仍然可以进行赋值。如果变量的类型与期望的类型具有一定的兼容性,TypeScript可能不会抛出错误。
  3. 隐式类型转换:TypeScript允许进行隐式类型转换,例如将数字类型赋值给字符串类型的变量。在这种情况下,TypeScript可能会自动进行类型转换,而不会抛出错误。
  4. 编译选项配置:TypeScript提供了一些编译选项,可以控制编译过程中的错误检查级别。如果某些错误检查级别被禁用或设置为较低的级别,TypeScript可能不会抛出错误。

需要注意的是,以上只是可能的原因,具体原因还需要根据代码的具体情况进行分析。如果想要更准确地了解为什么TypeScript没有在这里抛出错误,可以提供相关的代码片段进行进一步分析。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript never 类型

它用于表示不返回值的函数的返回类型:例如,永远循环的函数,始终抛出异常信号的函数等。 因为底部类型被用于表示不会正常的返回,一般没有返回值。...(这并不一定意味着该程序无法终止;子例程可以终止而不返回其调用者,或通过某种其他方式退出); 作为错误的指示器。...string 类型 } else if(typeof foo === "number") { // 这里 foo 被收窄为 number 类型 } else { // foo 在这里是...四、never 和 void 之间的区别 TypeScript 已经具有 never 类型,为什么它需要一个 void 类型。...该函数没有正常完成,这意味着它可能会抛出异常或根本无法退出执行。 never 类型为底部类型,也称为零类型或空类型。它通常表示为⊥,表示计算未将结果返回给调用方。

4.1K10

TypeScript 官方手册翻译计划【一】:基础

我们可能没有全面、彻底地进行测试,以至于没有发现一些潜在错误!或者,如果我们幸运地发现了这个错误,我们可能最终会进行大规模的重构,并添加许多不同的代码。...复制代码 还是之前的代码,但这次使用的是 TypeScript,它会在编译的时候就抛出错误。...在 TypeScript 中,下面的代码会抛出一个错误,指出 location 没有定义: const user = { name: 'Daniel', age: 26, }; user.location...最后,你不得不花费时间解决类型检查器抛出错误,但问题在于,原始的 JavaScript 代码本身就是可以运行的!为什么把它们转换为 TypeScript 代码之后,反而就不能运行了呢?...复制代码 TypeScript 报错提示第二个参数有问题。为什么呢?

87710

TypeScript 的魔法技能:satisfies

例如,下面这行代码编译得很好,但会在运行时会抛出错误: routes.NONSENSE.path // TypeScript 报错:发现这个路由属性不存在 为什么会这样?...所以TypeScript 批准任何键访问,包括从简单的错别字到完全没有意义的键。 有同学会说:“那么用 as 关键字来解决不行吗” 。...我们在这里使用 as const,我们会得到更精确的类型,精确到字符串的字面量 '/': const routes = { HOME: { path: '/' } } as const routes.HOME.path...function navigate(path: '/' | '/auth') { ... } 如果我们只使用 satisfies,其中每个 path 只知道是一个 string,那么 TS 会在报类型错误...因此,这意味着在我们的 IDE 中没有自动检查,也没有在编写时对错别字和其他问题的警告。 这就是为什么要进行组合的原因。

30210

你不知道的 「 import type 」

编译选项将会提示我们,这种写法将会抛出错误。...问题的关键在于,没有一种方式能识别它仅仅是个类型,以及是否应该删除它,因此「导入省略」并不够好。 同时,这也存在另外一个问题,TypeScript 导入省略将会去除只包含用于类型声明的导入语句。...这仍然是默认行为,没有破坏性的更改 preserve,它将会保留所有的语句,即使是从来没有被使用。它可以保留副作用。...error,它将会保留所有的导入(与 preserve 选项相同)语句,但是当一个值的导入仅仅用于类型时将会抛出错误。...因此,babel 也被迫错误地将此声明保留了转换后的代码中。 为什么会这样? Babel在转译过程中一次明确地处理一个文件。

4.1K61

java异常正确打印姿势

直接丢弃异常不记录、不抛出。这样的处理方式还不如不捕获异常,因为被生吞掉的异常一旦导致 Bug,就很难在程序中找到蛛丝马迹。错误3:丢弃异常的原始信息自认为是自己知道的异常,只记录自己组装的异常信息。...} catch (IOException e) { //只保留了异常消息,栈没有记录 log.error("文件读取错误, {}", e.getMessage());...; }}比较好的方式如上异常只知道文件读取错误的Message,至于为什么读取错误、是不是文件不存在,还是没权限,完全不知道。需要打印完整的异常信息。...(); } catch (IOException e) { throw new RuntimeException("读取文件发生IO异常了", e); }}错误4:抛出异常时不指定任何消息..., 3001);...}然后两个地方异常抛出typescript复制代码@GetMapping("wrong")public void wrong() { try { exceptionOne

13010

避免在 TypeScript 代码中使用模糊的 Object 或 {}

让我们深入探讨一下,看看为什么TypeScript 代码中使用这些模糊类型可能是时候慎重考虑了。...Param) { console.log(obj);}但这会成为一个问题,因为我们知道在 JavaScript 中,Object 是一切的基础,因此允许像字符串、日期、布尔值等这样的值被传递而不会抛出...TypeScript 错误,如下所示:myFunc({name: 'John', age: 30});myFunc('abc');myFunc(123);myFunc(true);myFunc([1,2,3...Record 接受两种类型,一个用于键,另一个用于值,如下所示:type Param = Record;在这里,我们可以看到 被传递给...myFunc('abc');myFunc(123);myFunc(true);myFunc([1, 2, 3]);myFunc(new Date());myFunc(() => {});myFunc({});在这里我们可以看到

11500

typeScript 配置文件该怎么写?

原因有: 它们大多数没有一个清晰的主线,而是按照 API 组织章节的,内容在「逻辑上」比较零散。 大多是“讲是什么,怎么用“,而不是”讲为什么,讲原理“。 大多数内容比较枯燥,趣味性比较低。...比如 tsconfig 是一个空的就没有有效信息: {} ❝tsconfig 的全部属性,以及属性的默认值可以在这里找到:http://json.schemastore.org/tsconfig ❞ 总结一下...否则抛出错误 根据 tsconfig json schema 校验是否格式正确。 否则,会从当前目录查找 tsconfig.json 文件, 如果找不到则逐层向上搜索父目录。...否则抛出错误 如果找到了则会去根据 tsconfig json schema 校验是否格式正确。...❝为什么没有 ES4 ?^_^ ❞ 总结 tsconfig 就是一个 JSON 文件,TypeScript 会使用该文件来决定如何编译和检查 TypeScript 项目。

1.9K20

TypeScript 5.3,带来这些小惊喜

,但确实还不行,在 TypeScript 中这会抛出一个错误: 在 TypeScript 5.3 中实现 throw 表达式的可能性不大。...但 TypeScript 报错了,尽管这段代码看起来是没问题的。 原因是 TypeScript 没有缩小 Example[T]到正确的键。...对Example[T]的任何缩小都会导致它的类型变为never - 因此导致上面的错误。...TypeScript 5.3可能会在这里实现一些改变。这里有一个关于这个改变动机的长期打开的 issue。 我对此非常激动,这里的推断不行让我难受很久了,也阻碍人们尝试泛型。...问题是,这还没有被添加到@types/node中。这个小问题导致了一个相对激烈的DefinitelyTyped issue讨论。 所以,TypeScript 团队介入查看这个问题,nice。

19020

TypeScript 的类型推导 Type Inference

官方链接 在 TypeScript 中,当没有显式类型注释时,有几个地方使用类型推断来提供类型信息。 比如 let a = 3; a 被推导成 number 类型。 x 变量的类型被推断为数字。...因为必须从提供的候选类型中选择最好的公共类型,所以在某些情况下类型共享一个公共结构,但没有一种类型是所有候选类型的超类型。...}; 在这里TypeScript 类型检查器使用 Window.onmousedown 函数的类型来推断赋值右侧的函数表达式的类型。...UIEvent 对象不包含按钮属性,因此 TypeScript抛出错误。...如果此函数不在上下文类型位置,则该函数的参数将隐式具有类型 any,并且不会发出错误(除非您使用 --noImplicitAny 选项): const handler = function (uiEvent

1.3K20

以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

:对于普通变量来说,与实际赋值一致的类型标注确实是没有意义的,TypeScript 的控制流分析能很好地做到这一点,而对于函数参数与类属性,主要是为了确保一致性,即函数的所有参数(包括重载的各个声明)、...为什么抛出的 Error 实例能够自动的收集调用栈信息,同时借助 proposal-error-cause[3] 提案还能够跨越调用栈来附加错误原因传递上下文信息,不过,真的会有人直接抛出一个字符串吗...为什么:虽然 TypeScript 是允许使用各种合法表达式作为枚举成员的,但由于枚举的编译结果拥有自己的作用域,因此可能导致错误的赋值,如: const imOutside = 2; const b...为什么:@ts-ignore 与 @ts-expect-error 二者的区别主要在于,前者是 ignore,是直接放弃了下一行的类型检查而无论下一行是否真的有错误,后者则是期望下一行确实存在一个错误,...并且会在下一行实际不存在错误抛出一个错误

2.6K30

精读《Typescript 4.4》

在 unknown 类型出来之前,Typescript 以 any 作为抛出错误的默认类型,毕竟谁也不知道抛出错误的类型是什么: try { // Who knows what this might...这句话很有意思,一个函数任何地方都可能出现运行时错误,这根本不是静态分析可以解决的,所以不可能自动推断错误类型,所以只能用 any。...在 Typescript 4.4 的 --useUnknownInCatchVariables 或 --strict 模式下都将以 unknown 作为捕获到错误的默认类型。...: number | undefined; } 为什么要这么定义呢?因为很多情况下,没有这个 key,与这个 key 的值为 undefined 的表现是等价的。...: number 的确切表述是:要么没有 age,要么有 age 且类型为 number,也就是说下面的写法应该是错误的: // With 'exactOptionalPropertyTypes' on

56220

TypeScript 官方手册翻译计划【三】:类型收缩

TypeScript 在这里并不会给出报错提示,但如果你不熟悉 JavaScript 的话,这是一个值得关注的事情。...在前面讲解真值收缩的例子中,我们编写的 printAll 函数存在潜在的错误,因为它没有适当地处理空字符串的情况。...如果我们赋值给 x 一个 boolean 类型的值,那么就会抛出一个错误,因为在声明类型中并不存在 boolean 类型。 let x = Math.random() < 0.5 ?...两种解释都是合理的,但只有后者会在禁用 strictNullChecks 的情况下仍然抛出一个错误。 那么,如果这时候我们再次检查 kind 属性会怎么样呢?...这样,当任意一个可能的情况没有在前面的分支得到处理的时候,在这个分支中就必然会抛出错误

2K20

一文解决现代编程语言选择困难:命令式编程

类型系统(Type System) 类型系统倍受大量开发人员的青睐,这也是为什么 TypeScript 之类的语言日渐大行其道。在我看来,类型系统去除了大量的程序错误,更容易实现重构。...错误处理 捕获异常并不是一种好的错误处理方式。抛出异常本身没有问题,但仅适用于程序没有办法恢复而必须崩溃这类异常情况。异常和空值一样,会破坏类型系统。...错误处理 抛出并捕获错误是 C++ 的首选错误处理机制。 不可变性 未内置对不可变数据结构的支持。 空值 C++ 中所有引用均可为空值。...Rust 提供了现代的空值替换和错误处理方法。 为什么本文将 Rust 排在 TypeScript 和 JavaScript 之后?...但使用不可为空类型并非编程默认,也并非 TypeScript 的惯用做法。 错误处理 TypeScript 中,使用抛出和捕获异常处理错误

1.1K30
领券