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

typescript:如何从受查找类型约束的泛型函数返回正确的类型泛型返回联合

在 TypeScript 中,我们可以使用条件类型(Conditional Types)来实现从受查找类型约束的泛型函数返回正确的类型泛型返回联合。

首先,让我们了解一下条件类型的基本语法。条件类型使用三个部分组成:一个条件表达式,一个为 true 时的类型,一个为 false 时的类型。语法如下:

代码语言:txt
复制
T extends U ? X : Y

其中,T 是待检查的类型,U 是要进行检查的类型,X 是当 T 可以赋值给 U 时的返回类型,Y 是当 T 不可以赋值给 U 时的返回类型。

对于我们的问题,我们可以定义一个条件类型来检查泛型函数的返回类型是否是联合类型。如果是联合类型,则返回该联合类型;如果不是联合类型,则返回 never 类型。代码如下:

代码语言:txt
复制
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

在上述代码中,我们使用了 infer 关键字来推断泛型函数的返回类型 R。

接下来,我们可以使用 ReturnType 来定义一个泛型函数,该函数接受一个泛型函数作为参数,并返回其返回类型。代码如下:

代码语言:txt
复制
function getReturnType<T extends (...args: any[]) => any>(fn: T): ReturnType<T> {
  return null as any; // 这里需要根据实际情况返回正确的类型
}

在上述代码中,我们使用了 extends 关键字来约束传入的参数 fn 必须是一个泛型函数。

最后,我们可以使用 getReturnType 函数来获取泛型函数的返回类型,并将其赋值给一个变量。代码如下:

代码语言:txt
复制
function foo(a: number, b: string): number | string {
  return Math.random() > 0.5 ? a : b;
}

const result: ReturnType<typeof foo> = null as any; // 这里需要根据实际情况赋值正确的类型

在上述代码中,我们使用 typeof 关键字来获取泛型函数 foo 的类型,并将其作为参数传递给 getReturnType 函数,从而获取泛型函数的返回类型。

需要注意的是,上述代码中的 null as any 和注释部分需要根据实际情况进行替换,以确保返回的类型是正确的。

推荐的腾讯云相关产品:无

希望以上内容能够帮助到您!如果还有其他问题,请随时提问。

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

相关·内容

TypeScript 中使用:使用指南

下面例子是一个简单型函数,该函数返回任何类型数组中第一个元素: function getFirstItem(items: T[]): T | undefined { return items...(item); } // return 语句返回类型推断是 "T | undefined" pop() { return this.data.shift(); } } Queue...在该章节中,我们将讨论使用使用基本技巧,以及如何避免可能导致复杂错误或降低代码可读性错误。 命名变量最佳实践 命名变量应该是直观,如果可能,应该具有描述性。...避免中常见错误 使用中一个常见错误是假设一个有确定属性或者方法而没正确约束。这个会导致运行时错误。当我们希望一个类型变量有特定行为,要时刻记得定义合适约束。...应该用来添加有意义,可扩展性代码。 如果一个类型只是覆盖少数特定类型,应该使用联合类型 union type。

10610

《现代Typescript高级教程》类型体操

让我们继续探讨 extends 关键字、TS 官方内置一些型函数以及它们使用。 extends 关键字和类型约束中,我们可以使用 extends 关键字来对类型进行约束。...Pick Pick 是 TypeScript另一个内置型函数,它可以给定类型 T 中选择指定属性 K 组成一个新类型。...我们还可以结合和内置型函数来实现更复杂类型操作。以下是一个示例,展示了如何使用 Pick 和来创建一个函数,该函数给定对象中选择指定属性,并返回一个新对象。...这个例子结合了、内置型函数 Pick、keyof 操作符和 extends 关键字,展示了如何TypeScript 中处理复杂类型操作和转换。...Exclude Exclude 是 TypeScript一个内置型函数,用于类型 T 中排除类型 U。

26330

typescript基础篇(6):

TypeScript中,可以使用来创建可重用组件,一个组件可以支持多种类型数据。这样用户就可以以自己数据类型来使用组件。...应当如何实现呢? 现在有两种解决方式:我们已经函数重载,联合类型。 // 1....6.2 型函数调用 型函数有两种调用方式: log("aaa") log(["aaa", "bbb"]) 不仅可以用定义函数还可以定义型函数类型,格式和函数签名差不多: const...const log2 = new Log() 注意,不得用于静态成员(static声明成员) 6.5 类型约束 有时候我们会希望实现类似这样功能: const log = (value:...这种逻辑别说在ts,在js也算不得很好实践。 这时,就需要类型约束

97120

终于搞懂TS中啦!!

>("Hello, TypeScript"); // 传入 string 类型 在第一次调用时,类型参数 number 被传递给 identity 函数,所以返回类型也是 number。...示例 2 和示例 3 展示了如何使用型函数并指定参数类型。 。 # 2. 使用变量: 变量允许我们在函数或类中使用一种不确定类型,而在实际使用时才确定具体类型。...我们定义了一个型函数reverse,接受一个数组参数,并返回反转后数组。...这样一来,我们可以在类实例化时指定具体类型,从而创建适用于不同类型数据实例。 # 5. 约束约束允许我们限制类型范围,使其满足特定条件 # 5.1....# 5.2 检查对象 key 1、keyof typescript 中检测类型方法,以联合类型方式方返回类型所有 key 2、搭配约、 refshttps

16320

类型即正义,TypeScript 入门到实践(四):5000字长文带你重新认识

欢迎阅读 类型即正义,TypeScript 入门到实践系列: 《类型即正义:TypeScript 入门到实践(序章)》[3] 《类型即正义:TypeScript 入门到实践(一)》[4] 《类型即正义...:TypeScript 入门到实践(二)》[5] 《类型即正义:TypeScript 入门到实践(三)》[6] 《类型即正义:TypeScript 入门到实践(四)》(也就是这篇) 在之前文章中...经过上面的例子,我们发现,其实,就像是一个关于 “类型函数” 一样,给定输入类型变量,然后可以使用输入变量经过组合比如 T[] 、进行联合类型或交叉类型操作,来作为注解类型使用。...image.png ,继续前进 接下来我们继续深入,解答之前文章里一些疑问,比如: 数组 类 同时我们还会了解一些新概念,比如: 接口 类型别名 约束 解决遗留问题 数组...重申:没有补全 TypeScript 代码是没有生命! 那么我们如何让在既使用同时,还能获得代码补全了?答案相信你也猜到了, 那就是我们这一节要讲约束

1.7K20

一文带你来了解 TypeScript

什么是我们先来看看 ChatGPT 怎么说:就是 将类型进行传递,然后确保在使用时候类型正确优缺点优点类型安全:使用可以让代码在编译时就发现类型错误,避免了运行时类型错误发生。...提高性能:代码在 TypeScript 中不需要进行额外类型检查和类型转换,可以提高程序运行效率。...约束较强:在 TypeScript 中,类型参数需要满足一定约束条件,这可能会限制使用范围和灵活性。...需要考虑类型擦除:与 Java 中类似,TypeScript 中也是通过类型擦除实现,这可能会影响一些代码实现和设计。..., 型函数继承接口,则参数必须实现接口中属性,这样就达到了型函数约束

50041

深入学习下 TypeScript

您还将探索一个异步示例,了解何时将类型参数直接传递给您,以及如何为您类型参数创建约束和默认值。...这里 TypeScript 调用代码本身推断类型。这样调用代码不需要传递任何类型参数。...ResultType 类型参数型函数。...这意味着 TypeScript 会将数据识别为具有字符串类型键和任意类型对象,从而允许您访问其属性。 类型参数约束 在某些情况下,类型参数需要只允许将某些形状传递给。...本节介绍了将与函数一起使用多种方法,包括直接分配类型参数以及为参数形状设置默认值和约束。 接下来,您将通过一些示例来了解如何使接口和类适用于更多情况。

38.8K30

【愚公系列】2021年12月 Typescript-

文章目录 一、typeScript 1、定义 2、型函数 3. 类 4....函数定义 5 接口 5.1 函数类型接口 5.2 接口(1) 5.3 接口(2) 5.4 在类中运用 二、TypeScript类 把类作为参数类型类 ---- 一、typeScript...中 定义 型函数 接口 1、定义 :软件工程中,我们不仅要创建一致定义良好API,同时也要考虑可重用性。...通俗理解:就是解决 类 接口 方法复用性、以及对不特定数据类型支持(类型校验) 2、型函数 只能返回string类型数据 function getData(value:string):string...x } }; var a2 = new A2('abc'); //实例化 a2.action('3') 二、TypeScript类 把类作为参数类型类 把类作为参数来约束数据传入类型

54420

【文末送书】Typescript 使用日志

表示是一个类型在定义时并不确定,需要在调用时候才能确定类型,主要包含以下几个知识点: •型函数类•约束 T extends XXX 我们试想一下,如果一个函数,把传入参数直接输出...(true); 其实本来很简单,但许多初学 Typescript 同学觉得很难,其实是因为可以结合索引查询符 keyof、索引访问符 T[k] 等写出难以阅读代码,我们来看一下。...•对象中兼容•函数返回值兼容•函数参数列表兼容•函数参数结构兼容•类中兼容•兼容 在 Typescript 中是通过结构体来判断兼容性,如果两个结构体一致,就直接兼容了,但如果不一致,Typescript...•animal => animal •返回值不对,返回值始终是协变,必须多传。 •animal => grayDog •正确。 所以,函数参数类型应该是逆变。...兼容 兼容,如果没有用到 T,则两个也是兼容

2.8K10

一文搞懂TypeScript,让你组件复用性大幅提升

我们将深入探讨在TypeScript中使用方法,展示如何在函数、类和接口中使用它们。我们将会讨论如何传递默认值、多个值以及条件值给。最后,我们还会讨论如何添加约束。...我们用字母 Y 表示,并将其默认类型设置为 number,因为它将用于乘以数组中挑选随机数。因为我们在处理数字,所以可以传递默认类型 number。...whichPet 返回值将是一个基于回调函数中提供条件值数组。我们可以添加条件并定义逻辑,以根据需求和具体情况进行调整。 七 、为添加约束 允许我们处理作为参数传递任何数据类型。...接着,我们创建了一个ApiService类,其中包括一个型函数,该函数接受一个URL路径并返回一个Promise。...必要时应用约束 使用类型约束(extends关键字)来限制可以与一起使用类型,确保只接受兼容类型

10810

Typescript 使用日志(干货)

表示是一个类型在定义时并不确定,需要在调用时候才能确定类型,主要包含以下几个知识点: •型函数类•约束 T extends XXX 我们试想一下,如果一个函数,把传入参数直接输出...(true); 其实本来很简单,但许多初学 Typescript 同学觉得很难,其实是因为可以结合索引查询符 keyof、索引访问符 T[k] 等写出难以阅读代码,我们来看一下。...•对象中兼容•函数返回值兼容•函数参数列表兼容•函数参数结构兼容•类中兼容•兼容 在 Typescript 中是通过结构体来判断兼容性,如果两个结构体一致,就直接兼容了,但如果不一致,Typescript...•animal => animal •返回值不对,返回值始终是协变,必须多传。 •animal => grayDog •正确。 所以,函数参数类型应该是逆变。...兼容 兼容,如果没有用到 T,则两个也是兼容

2.4K10

一起重学TypeScript

如果传入了一个 string 类型参数,那么我们也不知道它返回类型 : 它可以使 返回类型 和 传入类型 保持一致,这样我们可以清楚知道函数返回类型为什么类型。...5.1 接口 接口可以这样理解: 当你需要给接口指定类型时,但目前不知道属性类型为什么时,就可以采用接口 你可以给接口指定参数为多个类型,也可以单个;当使用时,明确参数类型即可。...22 5.2 型函数 定义型函数,可以让 传入参数类型参数 和 返回类型保持一致。...接口约束 通过定义接口, 型函数继承接口,则参数必须实现接口中属性,这样就达到了型函数约束约束 通过给类指定为另一个类,这样就规定了类类型都为另一个类 # 第一种 // 定义接口...interface DataInfo{ title: string, price: number } // 型函数 继承接口,进行对参数类型约束, 如果传入参数中,没有包含接口属性

2K00

TypeScript学习指南(有PDF小书+思维导图)

如果传入了一个 string 类型参数,那么我们也不知道它返回类型 :它可以使 返回类型 和 传入类型 保持一致,这样我们可以清楚知道函数返回类型为什么类型。...5.1 接口 接口可以这样理解: 当你需要给接口指定类型时,但目前不知道属性类型为什么时,就可以采用接口 你可以给接口指定参数为多个类型,也可以单个;当使用时,明确参数类型即可。...22 5.2 型函数 定义型函数,可以让 传入参数类型参数 和 返回类型保持一致。...接口约束 通过定义接口, 型函数继承接口,则参数必须实现接口中属性,这样就达到了型函数约束约束 通过给类指定为另一个类,这样就规定了类类型都为另一个类 # 第一种 // 定义接口...interface DataInfo{ title: string, price: number } // 型函数 继承接口,进行对参数类型约束, 如果传入参数中,没有包含接口属性

2.7K30

TS核心知识点总结及项目实战案例分析

和jsclass一致, typescript类有公共,私有与保护修饰符.... 我们可以使用来创建可重用组件,一个组件可以支持多种类型数据。这样用户就可以以自己数据类型来使用组件。...typescript中比较难懂知识点, 但是非常重要, 几乎任何第三方组件库里都会用到....(arg.length) return arg; } 复制代码 类似于函数类型定义, 我们也可以定义接口, 并且可以把参数当作整个接口一个参数, 这样我们就能清楚知道使用具体是哪个类型...year: T; compute: (x: T, y: T) => T; } let myGenericNumber = new MyNumber(); 复制代码 我们还可以定义约束来更准确控制类类型

1.6K10

TypeScript型函数类、接口,约束,一文读懂

最近在学TypeScript,然后整理了一下关于TypeScript一些笔记。...定义(generic type 或者 generics) TypeScript语言中一种特性。 是程序设计语言一种特性。是一种参数化类型。 ...型函数定义 function 函数名(参数1:T,...,参数n:类型):返回类型 { //函数体 } function 函数名(参数1:T,......,参数n:类型):返回类型 { //函数体 } 定义 class 类名{ //属性和方法签名} class 类型{ //属性和方法签名 } 接口定义...但是有些情况下,函数需要处理数据有一定约束,比如有一个型函数需要访问参数Tlength属性,并加1。基于这种需求,必须对参数T进行约束,也就是约束

2K30

一份TypeScript高级类型入门手册,附大量代码实例,值得收藏

作者:望道 https://juejin.cn/post/6904150785966211086 TypeScript 是一种类型语言,允许你指定变量类型,函数参数,返回值和对象属性。...Generic Types() 类型是复用给定类型一部分一种方式。它有助于捕获作为参数传递类型 T。 优点: 创建可重用函数,一个函数可以支持多种类型数据。...); // Output: "test" showType(1); // Output: 1 如何创建类型:需要使用并将 T(名称可自定义)作为参数传递。...T帮助我们捕获用户传入参数类型(比如:number/string)之后我们就可以使用这个类型 我们把 showType 函数叫做型函数,因为它可以适用于多个类型 接口 interface GenericType...T, 并通过类型 T来约束接口内 name 类型 注:变量约束了整个接口后,在实现时候,必须指定一个类型 因此在使用时我们可以将name设置为任意类型值,示例中为字符串或数字 多参数类型

1.5K40

一份TypeScript高级类型入门手册,附大量代码实例,值得收藏

作者:望道 原文:https://juejin.cn/post/6904150785966211086 TypeScript 是一种类型语言,允许你指定变量类型,函数参数,返回值和对象属性。...Generic Types() 类型是复用给定类型一部分一种方式。它有助于捕获作为参数传递类型 T。 优点: 创建可重用函数,一个函数可以支持多种类型数据。...); // Output: "test" showType(1); // Output: 1 如何创建类型:需要使用并将 T(名称可自定义)作为参数传递。...T帮助我们捕获用户传入参数类型(比如:number/string)之后我们就可以使用这个类型 我们把 showType 函数叫做型函数,因为它可以适用于多个类型 接口 interface GenericType...T, 并通过类型 T来约束接口内 name 类型 注:变量约束了整个接口后,在实现时候,必须指定一个类型 因此在使用时我们可以将name设置为任意类型值,示例中为字符串或数字 多参数类型

1.5K30
领券