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

TypeScript在function语句中推断void而不是never

的原因是为了更好地支持开发者在函数中使用不同的返回类型。

TypeScript是一种静态类型检查的编程语言,它在编译时进行类型检查,以提供更好的代码可靠性和开发效率。在函数中,返回类型的推断是根据函数体中的代码逻辑和返回语句来进行的。

当函数体中没有明确的返回语句或返回值为undefined时,TypeScript会推断函数的返回类型为void。void表示函数没有返回值,即函数执行完毕后不返回任何值。

而never类型表示函数永远不会返回,即函数在执行过程中会抛出异常或进入无限循环等情况,导致函数无法正常结束。在function语句中,TypeScript不会自动推断函数的返回类型为never,因为这可能会限制开发者在函数中使用其他返回类型的能力。

使用void类型的优势在于可以更清晰地表达函数的意图,同时也可以帮助开发者避免在函数中错误地返回其他类型的值。void类型的应用场景包括不需要返回值的回调函数、事件处理函数等。

对于TypeScript中的function语句,如果需要明确指定函数的返回类型为never,可以使用显式的类型注解来实现。例如:

代码语言:txt
复制
function throwError(message: string): never {
  throw new Error(message);
}

在这个例子中,函数throwError的返回类型被显式地指定为never,表示函数会抛出一个错误并永远不会返回。

腾讯云相关产品和产品介绍链接地址:

  • 云函数(Serverless Cloud Function):https://cloud.tencent.com/product/scf
  • 云开发(Tencent CloudBase):https://cloud.tencent.com/product/tcb
  • 云原生应用引擎(Tencent Cloud Native Application Engine):https://cloud.tencent.com/product/tcnae
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript 4.8 发布!重点新特性解读

所以我们现在可以定义出下面这样的函数,不需要实现任何类型断言: function throwIfNullable(value: T): NonNullable { if (value...; } return value; } 优化对模板字符串中的 infer 类型推断 infer 可以 extends 的条件语句中推断推断的类型,比如下面这个简单用法: type...U : never; TypeScript 4.8 对模版字符串中使用 infer extends 的情况进行了优化,下面这种情况 infer 以前会被约束为一个原始类型,现在可以推断出更精确的值:...inside. </3") adopt_animals() 但是 JavaScript 中不是这样的,在对象之间的 == 和 === 检查的其实是两个对象的引用,这应该算作 JavaScript...TypeScript 以前允许 JavaScript 文件 import 和 export 语句中导入和导出用类型声明,但是不支持值的导入导出。

86520
  • 【TS 演化史 -- 17】各文件的JSX工厂 、有条件类型和映射类型修饰符

    有条件类型 TypeScript 2.8 引入了有条件类型,这是类型系统的强大令人兴奋的补充。 有条件类型使咱们可以表达非均匀类型映射,即,根据条件不同的类型转换。...在有条件类型的extends子句中,可以使用新的infer关键字来推断类型变量,从而有效地执行类型上的模式匹配 type First = T extends [infer U, ...unknown...>; // string 注意,推断的类型变量(本例中为U)只能在条件类型的true分支中使用。...咱们需要传递类型作为类型参数T的参数,不是值;这就是为什么ReturnType和ReturnType是不正确的。...另一方面,Math.max() 方法期望任意多个数值参数(不是单个数组参数);因此,类型D被解析为number[](不是[number []])。

    2.5K20

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

    "function" 就像我们 padLeft 中看到的,这个运算符经常出现在大量的 JavaScript 库中, TypeScript 也能理解这个运算符,从而在不同的分支中收缩类型。...幸运的是,TypeScript 让我们知道 strs 只是收缩到 string[] | null 类型不是 string[] 类型。 这可能是讲解“真值”检查的一个不错的引子。...(后者的优势在于,TypeScript 可以将其推断为一个更具体的字面量布尔值类型 true,前者只能被推断为 boolean) // 下面的结果都是 true Boolean("hello"); /...但除了分析每个变量, if、while 等条件语句中查找类型保护之外,TypeScript 还做了不少其他工作。...通过使用 "circle" | "square" 不是 string,我们可以避免拼写错误。 function handleShape(shape: Shape) { // oops!

    2K20

    TypeScript 官方手册翻译计划【四】:函数

    参数列表和返回值类型之间,它使用的是 : 不是 =>。 构造签名 JavaScript 函数也可以通过 new 运算符进行调用。...它推断得到的返回值类型是 Type, firstElement2 推断得到的返回值类型却是 any,因为 TypeScript 需要使用约束类型去解析 arr[0] 表达式,不是函数调用期间“等着...可能的情况下,请始终使用联合类型参数,不是重载 函数中声明 this TypeScript 可以通过代码流分析推断出函数中的 this 指向。...只要某个函数没有 return 语句,或者 return 语句中没有返回任何显式的值,那么函数的返回值类型就会被推断void: // 返回值的类型被推断void function noop()...30, 40] const a = multiply(10, 1, 2, 3, 4); TypeScript 中,这些参数的类型注解隐式为 any[] 不是 any,任何给定的类型注解也必须是 Array

    2.6K20

    TypeScript 演化史 — 第三章】标记联合类型 与 never 类型

    代码的其余部分是纯 ES2015,不是特定于 TypeScript。 我们遵循与前面示例相同的逻辑。基于 Redux 操作的 type 属性,我们不修改现有状态的情况下计算新状态。... switch 语句的情况下,我们可以访问特定于每个操作类型的 text 和 index 属性,不需要任何类型断言。...nevervoid 之间的区别 你可能会问,为什么 TypeScript 已经有一个 void 类型为啥还需要 never 类型。...这样的函数 TypeScript 中被推断为有一个 void 返回类型。 具有 never 返回类型的函数永不返回。它也不返回 undefined。...也就是说,为函数表达式推断的返回类型可能与为函数声明推断的返回类型不同: // Return type: void function failwith1(message: string) { throw

    1K20

    TypeScript进阶 之 重难点梳理

    「思维方式决定了编程习惯,编程习惯奠定了工程质量,工程质量划定了能力边界」,学习 Typescript,最重要的就是我们类型思维的重塑。...如果不指定类型,就在定义的之后指定一个默认的类型 myLog(1) 「我们也可以把泛型变量理解为函数的参数,只不过是另一个维度的参数,是代表类型不是代表值的参数。」... T[K]就是去对象的 T 下的key: K的 value infer infer 关键字最早出现在 PR 里面,「表示 extends 条件语句中推断的类型变量」 是 ts2.8 引入的,条件判断语句中...p : T; 在上面的条件语句中,infer P 表示待推断的函数参数,如果T能赋值给(param : infer p) => any,则结果是(param: infer P) => any类型中的参数...需要注意一下两点即可: 推荐类型断言的预发使用 as关键字,不是 ,防止歧义 类型断言并非类型转换,类型断言发生在编译阶段。

    3.9K20

    一文看懂any,nevervoid和unknown的区别

    前言 不知道初学TypeScript的同学会不会和我一样被any,unknown,nevervoid这几个类型搞得晕头转向呢?...我们知道TypeScript解析我们的代码时会对代码进行类型推断,并且代码流不断深入的时候,类型会从较为宽泛的类型(例如any)一直推断到较为具体的类型,而这么推断下去是会有个终点,这个终点就是不存在的...,不可能发生的类型,也就是类型系统的底部类型(bottom type),never就是TypeScript的底部类型。...= h // 由于这个代码永远也到达不了,所以h的类型被自动推断never } } 上面的代码现在是没有问题的,不过假如某一天我们新增了一个新的PM类型,忘记在printTechDude...void表示空值,也就是null或者undefined,never则表示永远都不会出现的值。

    87130

    TypeScript 官方手册翻译计划【九】:类型操控-条件类型

    T['message'] : never interface Email { message: string; } interface Dog { bark(): void; }...条件类型的真分支中,TypeScript 知道 T 将会有 message 属性。...条件类型中进行推断 在上面的例子中,我们使用条件类型去应用约束并提取出类型。由于这种操作很常见,所以条件类型提供了一种更简单的方式来完成。...举个例子,在上面的 Flatten 函数中,我们可以直接推断出数组元素的类型,不是通过索引访问“手动”提取出元素的类型: type Flatten = Type extends Array...Item : Type; 这里,我们使用 infer 关键字声明式地引入了一个新的泛型类型变量 Item,不是真分支中指定如何提取出 T 数组的元素类型。

    80420

    TypeScript 快速入门(基础篇)

    它是 JavaScript 的一个超集,TypeScript JavaScript 的基础上添加了可选的静态类型和基于类的面向对象编程。...的子类型 别的类型不能赋值给never类型, never 类型可以赋值给任意类型 void 类型 void 为 函数没有类型,一般用在没有返回值的函数 # 如果方法类型为number, 则必须返回内容..., 内容且必须为数字 function add():number{ return 2323; } # 如果方法类型为void,不需要返回内容 function getAdd():void{...} const aa = getAny() console.log(aa)//999 'Hello TypeScript' 类型检测 类型推断 变量的声明和初始化同一行时,可以省去类型的声明 const...names = 'XiaoMing' 此时names的变量类型为 string names = 22 // TS 已经推断出了names 类型为string,不能赋值为 其它类型 console.log

    98020

    《现代Typescript高级教程》类型守卫

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 类型守卫 概述 TypeScript 中,类型守卫可以用于在运行时检查变量的类型,并在代码块内部将变量的类型范围缩小到更具体的类型...这种类型收窄可以让 TypeScript 编译器更好地理解我们代码的意图,从而提供更准确的类型推断和类型检查。...} } printValue('hello'); // 输出: HELLO printValue(3.1415); // 输出: 3.14 在上面的示例中,我们使用 typeof 操作符条件语句中检查变量...通过这种方式,我们能够更准确地推断和检查联合类型的变量。 使用 in 操作符进行类型守卫 in 操作符可以用于 TypeScript 中判断一个属性是否存在于对象中,从而进行类型判断和类型收窄。...以下是一个示例: interface Bird { fly(): void; } interface Fish { swim(): void; } function isBird(animal

    29630

    TypeScript 常用知识总结

    类型安全是一种在编码期间检测错误的功能,不是在编译项目时检测错误。这为开发团队创建了一个更高效的编码和调试过程。...五、TypeScript 数据类型 any、number、string、boolean、数组、元组、枚举、void、null、undefined、never 六、注意点 Null 和 Undefined...而在TypeScript中启用严格的空校验(--strictNullChecks)特性,就可以使得null 和 undefined 只能被赋值给 void 或本身对应的类型 never 是其它类型(包括...这意味着声明为 never 类型的变量只能被 never 类型所赋值,函数中它通常表现为抛出异常或无法执行到终止点(例如无限循环) 变量不要使用 name 否则会与 DOM 中的全局 window 对象下的...如果由于缺乏声明不能推断出类型,那么它的类型被视作默认的动态 any 类型。

    1.8K30
    领券