首页
学习
活动
专区
工具
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.2K10

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

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

90610
  • 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 中没有自动检查,也没有在编写时对错别字和其他问题的警告。 这就是为什么要进行组合的原因。

    53810

    你不知道的 「 import type 」

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

    4.3K61

    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

    24410

    避免在 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({});在这里我们可以看到

    15100

    typeScript 配置文件该怎么写?

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

    2K20

    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。

    23320

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

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

    2.7K30

    精读《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

    59020

    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.2K30

    4000字讲清 《深入理解TypeScript》一书 【基础篇】

    让我们用最初的代码做为示例,如果你没有按约定添加属性,TypeScript 编译器并不会对此发出错误警告: interface Foo { bar: number; bas: string; }...: 'matt' }); // ok logName({ name: 'matt', job: 'being awesome' }); // Error: 对象字面量只能指定已知属性,`job` 属性在这里并不存在...它自然被分配的一些例子: 一个从来不会有返回值的函数(如:如果函数内含有 while(true) {}); 一个总是会抛出错误的函数(如:function foo() { throw new Error...当一个函数没有返回值时,它返回了一个 void 类型,但是,当一个函数根本就没有返回值时(或者总是抛出错误),它返回了一个 never,void 指可以被赋值的类型(在 strictNullChecking...,它将会抛出一个错误

    1.9K30

    Flow 与 Typescript:哪个更适合你的项目?

    没有使用类型检查工具的情况下处理大型 JavaScript 代码库会让你感到头痛,特别是那些在运行时才会发现的错误会产生很多,但是当你采用了类型检查,或者使用了TypeScript之后,你会发现这些类型的错误大大减少...调用该函数时,TypeScript 会检查提供的对象的类型是否正确,如果类型不正确,就会像在调用第二个函数的时候代码将无法编译并抛出错误。...使用 Flow,您不必更改文件的扩展名,而是继续在带注释的文件.js和.jsx文件中编写普通的 JavaScript 如果我们保留上面的代码,JavaScript 引擎会因为注释而抛出错误; 因此,作为额外的步骤...在这里,我们声明了 Props 接口,它有一个属性 item,一个 Item 类型的对象数组——另一个接口有两个属性,一个 number 类型的 id 和一个 string 类型的 name,两者都是必需的...现在让我们删除我们的项目 const 的类型,看看这个错误是否消失:即使我们没有声明项目 const 应该是 type Item[],TypeScript 也足够聪明,可以发现在我们的ItemsList

    2K30
    领券