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

为什么此typescript模板返回never?

TypeScript是一种静态类型的编程语言,它在JavaScript的基础上添加了类型系统。在TypeScript中,never是一个表示永远不会发生的类型。

在给定的问答内容中,提到了一个名词"typescript模板返回never"。针对这个问题,我将解释为什么某个TypeScript模板会返回never类型。

在TypeScript中,never类型表示一个永远不会有返回值的类型。它通常用于以下几种情况:

  1. 函数抛出异常:当一个函数抛出异常时,它不会返回任何值,因此可以将其类型标注为never。例如:
代码语言:txt
复制
function throwError(message: string): never {
  throw new Error(message);
}
  1. 函数包含无法到达的终止点:当一个函数包含无法到达的终止点(如无限循环或条件分支中的不可达代码)时,可以将其类型标注为never。例如:
代码语言:txt
复制
function infiniteLoop(): never {
  while (true) {
    // 无限循环
  }
}
  1. 类型保护中的细化类型:在某些情况下,通过类型保护可以细化变量的类型为never。例如:
代码语言:txt
复制
function isString(value: unknown): value is string {
  return typeof value === 'string';
}

function processValue(value: unknown) {
  if (isString(value)) {
    // 在这里,value的类型被细化为string,因此在else分支中它的类型为never
    console.log(value.length); // 可以安全地访问string类型的属性和方法
  } else {
    // 在这里,value的类型为never,因为它不能是string类型
    console.log(value); // 编译器会报错,因为value的类型为never
  }
}

总结来说,never类型在TypeScript中表示一个永远不会有返回值的类型。它可以用于函数抛出异常、包含无法到达的终止点以及类型保护中的细化类型。通过使用never类型,可以增加代码的可读性和可靠性。

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

请注意,以上链接仅供参考,具体的产品选择应根据实际需求进行评估和决策。

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

相关·内容

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

ban-types 禁止部分值被作为类型标注,规则能够对每一种被禁用的类型提供特定的说明来在触发规则报错时给到良好的提示,场景如禁用 {}、Function、object 这一类被作为类型标注, 为什么...,如副作用等,同时显式指定的函数返回值也能在一定程度上提升 TypeScript Compiler 性能。...promise-function-async 返回 Promise 的函数必须被标记为 async,规则能够确保函数的调用方只需要处理 try/catch 或者 rejected promise 的情况.../index.module.scss"; restrict-template-expressions 模板字符串中的计算表达式其返回值必须是字符串,规则可以被配置为允许数字、布尔值、可能为 null...为什么:在模板表达式中非字符串与数字以外的值很容易带来潜在的问题,如: const arr = [1, 2, 3]; const obj = { name: "linbudu" }; // 'arr:

2.7K30

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

设置适用于整个项目中的每个JSX文件。现在,咱们还可以通过在文件的开头添加一个特殊的@jsx注释来覆盖项目范围的--jsxFactory设置。...never类型是 TypeScript 的底层类型,表示从未出现的值的类型。 分布式有条件类型 那么,为什么e 条件类型和never类型的组合是有用的呢?它有效地允许咱们从联合类型中删除组成类型。...null和undefined都可以赋值给null | undefined,这就是为什么后两种类型都选择never: type NonNullableEmailAddress = | string...TypeScript 一个长期存在的特性要求是能够提取给定函数的返回类型。下面是ReturnType类型的简化版本,该类型是在lib.es5.d.ts中预定义的。...这就是为什么将B类型解析为[any],即具有一个元素的元组的原因。

2.5K20
  • TS 进阶 - 类型系统

    # 类型系统层级 类型层级指,TypeScript 中所有类型的兼容关系,从最上面一层的 any 类型,到最底层的 never 类型。...1 : 2; // 1 同一基础类型的字面量联合类型 < 基础类型 字面量类型 < 包含字面量类型的联合类型(同一基础类型)< 对应的原始类型 # 装箱类型 type Result1 = string...1 : 2; // 1 | 2 在 TypeScript 内部代码的条件类型处理中,如果接受判断的是 any ,那么会直接返回条件类型结果组成的联合类型。所以此处的 any 是带限定条件的。...R 位置的值(即 R),否则返回 never type FunctionReturnType = T extends ( ...args: any[] ) => infer...模板字符串工具类型 模板字符串专属的工具类型 如将一个对象类型中所有属性名转换为大驼峰形式 # 属性修饰工具类型 主要使用 属性修饰 映射类型 索引类型 索引类型签名 索引类型访问 索引类型查询

    1.2K50

    TypeScript手记(二)

    同样TS支持模板字符串(被反引号包围( `),并且以 ${ expr } 这种形式嵌入表达式)。...当一个函数没有返回值时,你通常会见到其返回值类型是 void function warnUser(): void { console.log('This is my warning message'...例如, never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。...// 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message) } // 推断的返回值类型为...never function fail() { return error("Something failed") } // 返回never的函数必须存在无法达到的终点 function infiniteLoop

    54220

    Typescript-基础类型

    和Javascript一样,可以使用双引号(")或单引号(')表示字符串 let name:string = "bob" 还可以使用“模板字符串”,他可以定义多行文本和内嵌表达式。...当一个函数没有返回值时,你通常会见到返回值类型是void: function warnUser():void{ console.log("Thisis my warning message");...Never never类型表示的是那些永不存在的值的类型。例如,never类型是那些总是会抛出错误或者根本就不会有返回值的函数表达式或箭头表达式的返回值类型。...变量也可能是never类型,当他们被永不为真的类型保护所约束时。never 是任何类型的子类型,也可以赋值给任何类型。然而,没有类型可以赋值给never类型,即使any也不能赋值给never。 function error(message: string): never{ throw new Error(message) } function

    62230

    《现代Typescript高级教程》类型

    它还增加了额外的类型,比如any、unknown、never、void等。 number 在TypeScript中,所有的数字都是浮点数。这些数字的类型是number。...你可以使用单引号(')或双引号(")定义字符串,也可以使用反引号(`)定义模板字符串: let color: string = "blue"; color = 'red'; let fullName:...在接下来的对话中,我们可以进一步讨论其他的TypeScript类型,比如枚举(enum)、null、undefined、never、void以及对象类型。...例如,never类型是那些总是会抛出异常或者根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型: function error(message: string): never { throw...new Error(message); } void 在TypeScript中,void类型用于表示没有返回值的函数的返回类型。

    23140

    TypeScriptnever 和 unknown 的优雅之道

    1、前言  TypeScript 在版本 2.0 和 3.0 分别引入了 “never” 和 “unknown” 两个基本类型,在引入这两个类型之后,TypeScript 的类型系统得到了极大的完善。...按照类型系统的解释,在 TypeScript 3.0 中,有两个 top type(any 和 unknown) 和一个 bottom type(never)。...可以,不过原因和上面一样,JSON.parse() 的函数签名被添加到 TypeScript 系统之前,unknown 类型还没出现,否则它的返回类型应该是 unknown。...4.1.2 为什么说 any 不是严格的 bottom type 我在阅读一些文章的时候发现,大家常说 any 既是 top type,也是 bottom type,但这种说法并不严谨。...显然不能,举个很简单的例子: const a = 'anything'; const b: any = a; // 能够赋值 const c: never = a; // 报错,不能赋值 而我们为什么

    1.2K20

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

    Never never 类型是 TypeScript 中的底层类型。...('Not Implemented') },foo 的返回类型是 never) 你也可以将它用做类型注解: let foo: never; // ok 但是,never 类型仅能被赋值给另外一个 never...: let foo: never = 123; // Error: number 类型不能赋值给 never 类型 // ok, 做为函数返回类型的 never let bar: never = ((...表示一个从来不会优雅的返回的函数时,你可能马上就会想到与此类似的 void,然而实际上,void 表示没有任何类型,never 表示永远不存在的值的类型。...当一个函数没有返回值时,它返回了一个 void 类型,但是,当一个函数根本就没有返回值时(或者总是抛出错误),它返回了一个 never,void 指可以被赋值的类型(在 strictNullChecking

    1.9K30

    TypeScript infer 关键字

    V : never type StrDictMember = DictMember 在 TypeScript 2.8 中引入了条件类型,使得我们可以根据某些条件得到不同的类型,这里所说的条件是类型兼容性约束...= UnPromisify; // Person 三、ReturnType TypeScript 官方类型库中提供了 RetrunType 可获取方法的返回类型...provides no match for the signature '(...args: any): any'. type T7 = ReturnType; // Error 为什么...U : never; type Fn1Arg = ArgType; // number 如果你想要抽取函数中元组类型的所有参数的类型,这就变得更加有趣,在 TypeScript 3.0 版本之后...extractArrayType 的条件类型,该条件类型会判断是否类型 T 是属于数组类型,如果满足条件的话,我们使用 infer 关键字来声明一个新的类型变量 U 并返回该类型,否则返回 never

    1.3K40

    TS 4.1 新特性实现 Vuex 无限层级命名空间的 dispatch 类型推断。

    前言 前几天,TypeScript 发布了一项 4.1 版本的新特性,字符串模板类型,还没有了解过的小伙伴可以先去这篇看一下:TypeScript 4.1 新特性:字符串模板类型,Vuex 终于有救了?...M : never 然后通过 keyof GetMutations,即可轻松拿到 'add' | 'remove' 这个类型,我们再实现一个拼接 Key 的类型,注意这里就用到了 TS 4.1 的字符串模板类型了...AddPrefix> // 这里对子 modules 做 keys 的提取 | GetSubModuleKeys 利用 extends 去判断类型结构,对不存在 modules 的结构直接返回...never,再用 infer 去提取出 Modules 的结构,并且把前一个模块的 key 拼接在刚刚写好的 GetModulesMutationKeys 返回的结果之前: type GetSubModuleKeys...store.dispatch("cart/add") store.dispatch("user/login") store.dispatch("user/admin/login") 复制代码 前往 TypeScript

    2.2K30

    TypeScript 基础教程

    为什么学习TS *** 因为大家都在用,React、Vue、Angular、Antd、Element-UI、Mobx、Redux… 因为大家都在学,既是一个前端的趋势也是提升扩展个人技术的不错方法。...为什么需要使用TS *** 通过引入强类型系统,补充JS的短板。原生JS类型的灵活性导致在实际环境中可能会出现各种不确定的bug。...// 返回never的函数必须存在无法达到的终点 function error(message: string): never { throw new Error(message); } // 推断的返回值类型为...never function fail() { return error("Something failed"); } // 返回never的函数必须存在无法达到的终点 function infiniteLoop...: number; } let bar: Person = { name: 'bar', sex: "man", age: 18, } Typescript 中函数的类型声明 *** 函数声明主要涉及到函数参数类型声明以及函数返回值类型限定

    1.1K20
    领券