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

根据typescript中的参数值有条件地键入函数

是指根据函数参数的不同值来决定函数返回值的类型。这种特性称为条件类型,它是在typescript 2.8版本中引入的。

在typescript中,可以使用条件类型来根据参数的类型来确定函数返回值的类型。通过使用泛型和条件类型的组合,可以实现根据不同的参数值进行类型检查。

下面是一个示例:

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

function getValue<T>(arg: T): ReturnType<T> {
  return arg();
}

function numberFunc(): number {
  return 10;
}

function stringFunc(): string {
  return 'hello';
}

const numberResult: number = getValue(numberFunc); // 正确的类型推断,numberResult的类型为number
const stringResult: string = getValue(stringFunc); // 正确的类型推断,stringResult的类型为string

在上面的示例中,我们定义了一个ReturnType类型,它接受一个函数类型T作为参数,并根据函数的返回值类型来确定返回的类型。然后,我们定义了一个getValue函数,它接受一个参数arg,并使用ReturnType类型来确定函数的返回类型。

通过使用泛型和条件类型,我们可以实现根据函数参数的值有条件地确定函数返回值的类型。

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

参考链接:无腾讯云相关产品介绍链接地址。

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

相关·内容

【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

, 这个增加的参数是 对象本身的指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void..., 就是通过 this 指针隐藏左操作数 , 对象本身 就是 左操作数 , 在成员函数中 , 通过 this 指针访问对象本身的成员 ; 在全局函数中 , 实现两个 Student 类相加 , 接收两个...; } 详细代码 , 参考最后的完整代码示例 ; 二、有参构造函数设置默认参数值 ---- 为 Student 类定义了有参构造函数 , 则其默认的无参构造函数 , 就不会生成 ; // 带参构造函数...; 如下带参数的构造函数 , 并且为其 有参构造函数 的参数 设置一个默认值 , 此时就可以使用 类名 对象名 的方式定义对象变量 ; class Student { public: // 带参构造函数...返回的是一个匿名对象 , 该匿名对象 是在 成员函数 中新创建的对象 ; // 成员函数中, 将两个 Student 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 返回一个新

23820

如何在 TypeScript 中使用函数

当我们在函数体中返回字符串时,TypeScript 正确地假定我们的函数具有字符串返回类型。.... (1016) 键入的箭头函数表达式 到目前为止,本教程已经展示了如何在 TypeScript 中键入使用 function 关键字定义的普通函数。...函数重载的一个有趣的方面是,在大多数编辑器中,包括 VS Code 和 TypeScript Playground,只要我们键入函数名称并打开第一个括号来调用函数,就会出现一个弹出窗口,其中包含所有可用的重载...有条件地向数组添加值时的一项常见任务是检查某些条件,然后,仅在条件为真时才添加值。如果该值不为真,则代码向数组添加一个假布尔值。...结论 函数是 TypeScript 中应用程序的构建块,在本教程中,我们学习了如何在 TypeScript 中构建类型安全的函数,以及如何利用函数重载来更好地记录单个函数的所有变体。

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

    有条件类型 TypeScript 2.8 引入了有条件类型,这是类型系统的强大而令人兴奋的补充。 有条件类型使咱们可以表达非均匀类型映射,即,根据条件而不同的类型转换。...下面是一个在 TypeScript 的lib.es5.d.ts类型定义文件中预定义的有条件类型的例子 /** * Exclude null and undefined from T */ type...never类型是 TypeScript 的底层类型,表示从未出现的值的类型。 分布式有条件类型 那么,为什么e 条件类型和never类型的组合是有用的呢?它有效地允许咱们从联合类型中删除组成类型。...TypeScript 一个长期存在的特性要求是能够提取给定函数的返回类型。下面是ReturnType类型的简化版本,该类型是在lib.es5.d.ts中预定义的。...预定义的有条件类型 TypeScript 2.8 在lib.d.ts里增加了一些预定义的有条件类型: Exclude -- 从T中剔除可以赋值给U的类型。

    2.5K20

    【万字长文】深入理解 Typescript 高级用法

    嗯,同学你说的太对了,不过你不要着急,接着听我说,其实类型系统中的函数还支持对入参的约束。...当函数入参个数不确定地时候,又不愿意写出 (...args: any[]) => void 这种毫无卵用的参数类型定义。...怎理解呢,根据编程中的 "二八原则",20%的知识储备已经可以解决80%的需求问题,但是这剩余的20%,就是入门与熟练的分水岭。...的函数,该函数支持传入多个函数,传入函数的返回值为作为combineReducers 的入参,我们需要整合多个入参数函数的返回值,并生成最终的对象供 combineReducers 函数使用。...类型的过滤与分流 在上一小节中,我们反复地扯到了 「函数式编程」、「响应式编程」、「流式编程」 这些抽象的概念,其实并不是跑题,而是者两者的思想(理念)实在太相似了,在本小节后续的讲解中,我还会一直延用这些概念帮助大家理解

    3.4K20

    TypeScript--deno前置学习

    2.形参和实参 (1)形参的使用 函数定义的时候写的参数是形参。从字面意义上我们可以看出,形参就是形式上的参数。我们定义了形参也就规定了此函数的参数个数和参数类型,规范了函数。...function searchXiaoJieJie(age:number):string{ return '找到了'+age+'岁的姐姐' } 比如这个函数,就定义了一个形参,它的类型是数值类型...在TypeScript语言中,函数的形参分为:可选形参、默认形参、剩余参数形参等。 (1)有可选参数的函数 可选参数,就是我们定义形参的时候,可以定义一个可传可不传的参数。...剩余参数就是形参是一个数组,传递几个实参过来都可以直接存在形参的数组中。...1.不传递任何参数 构造函数中不传递参数时,Date()构造函数将根据当前日期和时间创建一个Date对象。我们看下面的例子理解一下。

    2.6K20

    Type Script 的基本概念及常用语法

    TypeScript 文件了,尽管有很多的 IDE 都能写 TS,但最好的开发工具还是微软开发的 VS Code,快捷键 Control + ` 打开终端,键入以下命令即可完成安装 字符串新特性 TypeScript...,我们可通过 class 模板来定义我们所需要的类型 我们刚刚是通过在变量声明的时候指定了默认的参数,同样的,我们在调用方法传参时,也能同样使用等号来指定参数的默认值,不过需要注意的是,声明默认值的参数要放在最后...长度为 2,所以调用后方法中第 3 个为 undefine,第二次调用,由于方法只有 3 个参数,args1 长度为 4,所以最后一个参数被忽略了 Generator 函数:控制函数的执行过程,手工暂停和恢复代码执行...{}括出来,而数组则是使用[]括起来的 箭头表达式 箭头表达式是用来声明匿名函数,消除传统匿名函数的 this 指针问题 for of 循环 在 JavaScript 中,我们使用的循环一般是forEach...,而for of遍历的是数组元素值,除此之外,for of还能根据某个条件终止循环,其余两者均不能终止 此外,for of 循环还能循环字符串

    2.1K30

    揭秘Python中的Streamlit库:简单易用、方便后端的应用实例

    挑战:加入调参功能增加一点难度,挑战加入调参功能,在上述示例中添加调参功能,比如可以在应用程序中添加一个滑块,允许用户调整某个参数,并根据参数的值进行相应的处理,通过这样的加入,可以更深入地理解Streamlit...("当前参数值: " + str(param)) # 根据参数值进行相应的处理逻辑if __name__ == "__main__": main()上面的示例代码展示了一个简单的聊天应用,并添加了一个滑块调参的功能...接着,使用st.text_input()函数创建了一个文本输入框,用于接收用户输入的消息,这样用户可以在输入框中键入消息文本。...最后,使用st.text()函数显示当前参数值,以便用户知道他们所调整的参数的当前值,我们可以根据参数值执行适当的处理逻辑。...小结:通过使用Streamlit的简单API,可以轻松创建交互式应用程序,并为用户提供调参的功能,这可以在应用程序中灵活地调整参数,并观察参数值对应的结果。

    1.6K62

    获取URL参数的最佳实践:兼容Hash模式的TypeScript实现

    获取URL参数的最佳实践:兼容Hash模式的TypeScript实现 在现代Web开发中,获取URL中的参数是一项常见且重要的需求。这些参数常用于传递状态、配置以及用户数据等。...decodeURIComponent(value) : null } 功能概述 目标:根据指定的参数名key,从当前URL中提取对应的参数值。 兼容性:支持标准的search参数(即?...函数顶部的注释使用了JSDoc风格,清晰地描述了函数的用途、参数、返回值以及使用示例,有助于提升代码的可读性和可维护性。...通过调用get方法,可以方便地根据键名获取对应的参数值。 返回解码后的参数值 return value != null ?...在实际项目中,您可以将这个函数封装成工具库的一部分,并根据需要进行扩展,例如支持批量获取参数、处理数组参数等,以满足更复杂的需求。

    11000

    Typescript基础语法

    typescript与javascript typescript是一个js的超集,个人理解为包装了面向对象编程逻辑的语法糖,所以一般使用typescript的语言来编写代码,然后再使用typescript...安装typescript npm install -g typescript 类型语法 通过在形参右侧使用 : 类型,代表限定的形参类型。...其中,any代表任意类型,比较特殊有,void空返回值,只能赋值为undefined或者null,never类型代表永远没有返回值的类型,比如抛出异常的函数,死循环的函数。...中还支持类的定义,如下为官方demo,通过class关键字定义类,类中成员表示与接口一样,同时,可以为类设定constructor——构造函数,constructor的形参可以添加public修饰符,代表同时该形参同时表示一个...类通过implements关键字,指定要实现的接口,需要类中具备满足接口定义的成员 创建类对象使用new 调用构造函数 interface Man{ fullName: string;

    1.5K20

    《现代Typescript高级教程》概述

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 概述 引言 在TypeScript的发展过程中,对类型系统的持续改进一直是其核心任务。...TypeScript 2.1带来了映射类型,这是一种创建新类型的方式,基于旧类型转换其属性。2.8版本则引入了有条件的类型,使得类型系统具备了更多的表达力。...由于TypeScript是JavaScript的超集,所以开发者可以轻松地将JavaScript代码迁移到TypeScript。同时,开发者还可以使用来自JavaScript生态系统的库和工具。...TypeScript还支持最新的ECMAScript特性,如箭头函数、模块、解构等。 TypeScript也为大型项目提供了必要的工具。...TypeScript的类型系统使得开发者可以明确定义对象和函数的结构,这样在大型项目中维护和理解代码就更加简单。

    18640

    【TS 演化史 -- 14】拼写校正和动态导入表达式

    该算法在 TypeScript 编译器的checker.ts文件中的getSpellingSuggestionForName函数中实现,如下所示 /** * Given a name and a list...动态导入表达式 TypeScript 2.4 添加了对动态import()表达式的支持,允许用户在程序的任何位置异步地请求某个模块。...但是,ES6 导入声明是完全静态的,必须位于文件的顶层,这意味着咱们不能将它们嵌套在if语句中,以便有条件地导入模块。这就是动态import()出现的原因。...根据目标模块系统的不同,为 import() 表达式生成的 JS 代码将大不相同。 如果咱们使用--module esnext编译咱们的 TypeScript 应用程序,将生成以下 JS 代码。...所有import()表达式都将转换为require()调用,这些调用可以在程序中的任意位置有条件地执行,而不必事先加载,解析和执行模块。

    1.5K20

    编写一个非常简单的 JavaScript 编辑器

    对于从未使用过TypeScript的人来说,从根本上说它就是JavaScript的超集,允许可选地指定类型。类型用于检查错误,然后被忘记,因为最终我们生成JavaScript。...这里我们存储两样东西: 包含在编辑器中的文本 文本中插入符的位置 TextBeforeCaret和TextAfterCaret显然允许我们得到所有文本之前或之后的插入符。...其余的方法允许: 插入字符 删除字符 向左移动插入符 向右移动插入符 函数updateHTML 函数updateHTML实现了插入符的把戏: ?...配线(wiring) 配线包括附加事件处理程序到: 当我们键入字符的时候获取 当我们删除字符的时候获取 当我们使用左箭头和右箭头的时候获取 然后我们从Editor类中调用方法。...结论 好的,让我们先简单的开始:一个非常小的编辑器,在这个编辑器中我们可以键入、删除和使用箭头移动。这不是最令人印象深刻的编辑器。但它简单,也可以工作。

    94331

    TypeScript(6)函数「建议收藏」

    TypeScript 能够根据返回语句自动推断出返回值类型。 书写完整函数类型 现在我们已经为函数指定了类型,下面让我们写出函数的完整类型。...编译器还会假设只有这些参数会被传递进函数。 简短地说,传递给一个函数的参数个数必须与函数期望的参数个数一致。 JavaScript 里,每个参数都是可选的,可传可不传。...没传参的时候,它的值就是 undefined。 在TypeScript 里我们可以在参数名旁使用 ? 实现可选参数的功能。...函数重载: 函数名相同, 而形参不同的多个函数 在JS中, 由于弱类型的特点和形参与实参可以不匹配, 是没有函数重载这一说的 但在TS中, 与其它面向对象的语言(如Java)就存在此语法 /* 函数重载...: 函数名相同, 而形参不同的多个函数 需求: 我们有一个add函数,它可以接收2个string类型的参数进行拼接,也可以接收2个number类型的参数进行相加 */ // 重载函数声明 function

    64830

    TypeScript 基础学习

    所以我们先来看一下有哪些类型 TypeScript中的数据类型有: Undefined : 未定义; Number:数值类型; string : 字符串类型; Boolean: 布尔类型; enum:枚举类型...TypeScript友好的为我们提供了一种特殊的类型any,比如我们在程序中不断变化着类型,又不想让程序报错,这时候就可以使用any了。...什么是形参? 函数定义的时候写的参数是形参。 什么是实参? 调用函数时传递的具体值就是实参。...函数参数形式 TypeScript的函数参数是比较灵活的,函数的形参分为:可选形参、默认形参、剩余参数形参等。 可选参数 可选参数,就是我们定义形参的时候,可以定义一个可传可不传的参数。...剩余参数就是形参是一个数组,传递几个实参过来都可以直接存在形参的数组中。

    65700

    10 个关于 TypeScript 的小技巧

    然后 TypeScript 根据作为 addEventListener 方法中第一个参数的“click”文字确定事件的类型。...然后,仅当开发人员处理旧文件时,他才会删除此注释并仅修复该文件中的所有掉毛错误。这样一来,我们就不会进行革命,而只会进行进化-代码库会逐渐但安全地得到改善。...因此,如果改为使用函数fn(param):string {我会忘记该类型(函数fn(param){),TypeScript将不会关注我返回的内容,即使我从该函数返回了任何内容。...更准确地说:它将根据您退回或未退回的商品推断出退货价值。 幸运的是,TSLint可以为您提供帮助。...API 响应创建 Interface 如果您收到来自API的大量嵌套响应,那么手动键入相应的接口确实很麻烦。

    1.3K10

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

    最近在学TypeScript,然后整理了一下关于TypeScript中泛型的一些笔记。...泛型的定义(generic type 或者 generics) 泛型是TypeScript语言中的一种特性。 是程序设计语言的一种特性。泛型是一种参数化类型。 ...定义函数或方法是的参数是形参,调用此函数或方法时传递的参数值是实参。 泛型一般用来处理多个不同类型参数的方法。就是在方法中传入通用的数据类型,使多个方法合并成一个。...在使用过程中,泛型操作的数据类型会根据传入的类型实参来确定 泛型可以用在 类、接口、方法中,分别被称为 泛型类、泛型接口、泛型方法。...T 必须放在中间 一般不能单独出现,会出现在类 函数、 接口 、中 ,在函数体内,编译器不知道泛型变量T具体数据类型,只能认为其为 任意值(any) 类型 泛型约束 泛型参数T类似于any类型

    2.8K30
    领券