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

如果参数类型为"never“,则typescript ReturnType为"any”

如果参数类型为"never",则 TypeScript ReturnType 为"any"。

在 TypeScript 中,ReturnType 是一个内置的工具类型,它用于获取函数的返回类型。当参数类型为"never"时,意味着函数永远不会返回任何值,因此 ReturnType 推断为"any",表示函数的返回类型可以是任意类型。

"never" 类型在 TypeScript 中表示永远不会发生的值,通常用于表示无法到达的代码分支或抛出异常的函数。它是所有类型的子类型,因此可以赋值给任何类型。

以下是一个示例:

代码语言:txt
复制
function throwError(): never {
  throw new Error("An error occurred");
}

function getValue(): never {
  while (true) {
    // do something
  }
}

type ReturnTypeOfThrowError = ReturnType<typeof throwError>; // 类型推断为 any
type ReturnTypeOfGetValue = ReturnType<typeof getValue>; // 类型推断为 any

在上面的示例中,throwError 函数抛出一个错误,而 getValue 函数包含一个无限循环。由于这两个函数永远不会返回任何值,ReturnType 推断为"any"。

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

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

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

相关·内容

TypeScript infer 关键字

一、类型提取 在 TypeScript 中我们能够很方便地从复合类型中提取出单个类型,以数组、元组或对象例,我们可以通过成员访问的语法来提取数组、元组或对象中元素或属性的类型,具体示例如下: type...) => T>; // number[] type T4 = ReturnType; // any type T5 = ReturnType; // any // Type '...U : never; type Fn1Arg = ArgType; // number 如果你想要抽取函数中元组类型的所有参数类型,这就变得更加有趣,在 TypeScript 3.0 版本之后...,元组也支持剩余参数与展开参数,因此我们可以通过定义 ArgsType 类型,来实现上述功能,具体代码如下: type VariadicFn = (...args...extractArrayType 的条件类型,该条件类型会判断是否类型 T 是属于数组类型如果满足条件的话,我们使用 infer 关键字来声明一个新的类型变量 U 并返回该类型,否则返回 never

1.3K40

TypeScript 强大的类型别名

原理是令T'和U'分别为T和 U 的实例,并将所有类型参数替换为any如果T'能赋值给 U',则将有条件的类型解析成 X,否则为Y。...typeof 在 JS 中 typeof 可以判断一个变量的基础数据类型,在 TS 中,它还有一个作用,就是获取一个变量的声明类型如果不存在,获取该类型的推论类型。...never : T; 以上语句的意思就是 如果 T 能赋值给 U 类型的话,那么就会返回 never 类型,否则返回 T,最终结果是将 T 中的某些属于 U 的类型移除掉,举个例子: type T00...T : never; 以上语句的意思就是 如果 T 能赋值给 U 类型的话,那么就会返回 T 类型,否则返回 never,最终结果是将 T 和 U 中共有的属性提取出来,举个例子: type T01...,不过可以如下自定义: type PowerPartial = { // 如果是 object,递归类型 [U in keyof T]?

3.3K20

巧用 TypeScript(五)-- infer

整句表示如果 T 能赋值给 (param: infer P) => any结果是 (param: infer P) => any 类型中的参数 P,否则返回 T。...在 2.8 版本中,TypeScript 内置了一些与 infer 有关的映射类型: 用于提取函数类型的返回值类型: type ReturnType = T extends (...args:...P : any; 相比于文章开始给出的示例,ReturnType 只是将 infer P 从参数位置移动到返回值位置,因此此时 P 即是表示待推断的返回值类型。...type Func = () => User; type Test = ReturnType; // Test = User 用于提取构造函数中参数(实例)类型: 一个构造函数可以使用...new 来实例化,因此它的类型通常表示如下: type Constructor = new (...args: any[]) => any; 当 infer 用于构造函数类型中,可用于参数位置 new

11510

巧用 TypeScript(五)-- infer

整句表示如果 T 能赋值给 (param: infer P) => any结果是 (param: infer P) => any 类型中的参数 P,否则返回 T。...在 2.8 版本中,TypeScript 内置了一些与 infer 有关的映射类型: 用于提取函数类型的返回值类型: type ReturnType = T extends (...args...P : any; 复制代码 相比于文章开始给出的示例,ReturnType 只是将 infer P 从参数位置移动到返回值位置,因此此时 P 即是表示待推断的返回值类型。...type Func = () => User; type Test = ReturnType; // Test = User 复制代码 用于提取构造函数中参数(实例)类型: 一个构造函数可以使用...new 来实例化,因此它的类型通常表示如下: type Constructor = new (...args: any[]) => any; 复制代码 当 infer 用于构造函数类型中,可用于参数位置

1.6K30

精读《Typescript infer 关键字》

Typescript 官网也拿 ReturnType 这一经典例子说明它的作用: type ReturnType = T extends (...args: any[]) => infer R ?...R : any; 理解如果 T 继承了 extends (...args: any[]) => any 类型返回类型 R,否则返回 any。其中 R 是什么呢?...R[0] : never 可以理解如果此时 T 满足 (...args: any) => any 这个结构,同时我们用 infer R 表示 R 这个临时变量指代第一个 any 运行时类型,那么整个函数返回的类型就是...如果 T 都不满足 (...args: any) => any 这个结构,比如 GetFirstParamType,那这种推导根本无从谈起,直接返回 never 类型兜底,当然也可以自定义比如...在 TypeScript 中,对象、类、数组和函数的返回值类型都是协变关系,而函数的参数类型是逆变关系,所以 infer 位置如果在函数参数上,就会遵循逆变原则。

78040

TS 从 0 到 1 - 泛型进阶

A = { name: 2022 }; 泛型参数的默认类型遵循以下规则: 有默认类型类型参数被认为是可选的 必选的类型参数不能在可选的类型参数之后 如果类型参数有约束,类型参数的默认类型必须满足约束...当指定类型实参时,只需要指定必选类型参数类型实参,未指定的类型参数会被解析默认类型 一个被现有类或接口合并的类或者接口的声明可以为现有类型参数引入默认类型 一个被现有类或接口合并的类或者接口的声明可以引入新的类型参数...定义 // 如果 T 能赋值给 U,那么就会返回 never 类型,否则返回 T 类型 // 最终实现的效果就是将 T 中某些属于 U 的类型移除掉 type Exclude = T extends...定义 type ReturnType any> = T extends (...args: any) => infer R ?...R : any; 示例 type T0 = ReturnType string>; // string type T1 = ReturnType void>

70820

TypeScript 类型体操 - 基础操作

extends 对类型参数做匹配,结果保存到通过 infer 声明的局部类型变量里,如果匹配就能从该局部变量里拿到提取出的类型。...当类型参数联合类型,并且在条件类型左边直接引用该类型参数的时候,TypeScript 会把每一个元素单独传入来做类型运算,最后再合并成联合类型,这种语法叫做分布式条件类型。...; // false # IsNever never 在条件类型中也比较特殊,如果条件类型左边是类型参数,并且传入的是 never,那么直接返回 never: type TestNever...在 TypeScript 中有函数参数是有逆变的性质的,也就是如果参数可能是多个类型参数类型会变成它们的交叉类型。...联合类型作为类型参数出现在条件类型左侧时,会分散成单个类型传入,最后合并。 never 作为类型参数出现在条件类型左侧时,会直接返回 never

1.8K60

TypeScript 疑难杂症

限制传入对象必须包含某些字段 用于给某个处理特定对象的函数来限制传入参数,尤其是当对象的某些字段是可选项的时候,比如说: test函数接受的参数类型: interface Param { key1...P : never type Test = PromiseInnerType> // Test 的类型 string 其实上面就是 infer的通常用途。...比如,你还可以写一个 ReturnType的 Promise 版本,用于获取 Promise 函数的"解构类型" type PromiseReturnType any>...test> // Test 的类型 { a: number } 如果你用 React 的话,不难想到可以利用上述原理从一个组件中获取 PropsType。...(injectUser, injectBook) // { user: number, book: string } 原理是 TypeScript 会为使用了不定参数运算符的每个参数自动解包数组泛型和其一一映射

2K10

TypeScript的另一面:类型编程

ReturnType被调用,泛型T被实际类型填充,如果T满足条件类型的约束,就返回R的值,在这里R即为函数的返回值实际类型。...实际上为了严谨,应当约束泛型T函数类型,即: type ReturnType any> = T extends (...args: any) =...这里实际上使用到了分布式条件类型的特性,假设 Exclude 接收 T U 两个类型参数,T 联合类型中的类型会依次与 U 类型进行判断,如果这个类型参数在 U 中,就剔除掉它(赋值 never) type...infer 一节中我们实现了用于获取函数返回值的ReturnType: type ReturnType any> = T extends (...; b: never; c: never; d: "d"; }; UseIt会保留所有字段,满足条件的字段其键值字面量类型(值键名) 加上后面一部分: // "d" type UseIt2

1.6K20

TypeScript中的高级类型工具类型及关键字

本文主要帮助理解 TypeScript 中的高级类型及工具类型。在实际使用 TypeScript 的开发过程中,得益于这些高级类型于工具类型,我们可以更方便的构建出我们需要的类型。...,代码将会变得臃肿,反之如果我们高级类型来解决时,他将会变得简单高效。...一、高级类型 泛型 泛型可以理解一个变量,这个变量的值是一个类型。和函数的参数一样。...属性的 object // 第二个参数设置第一个参数这个对象中的一个属性 // 第三个参数设置第二个参数的属性值 const addAttr = <T extends {name: string},...= 10; ReturnType 构造一个由函数类型返回值类型 T 的类型 // type ReturnType any> = T extends

2.1K30
领券