首页
学习
活动
专区
工具
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 对象相加 // 全局函数 转为 成员函数 , 少了一个参数 // 返回一个新

22420

如何在 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

    揭秘PythonStreamlit库:简单易用、方便后端应用实例

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

    1.4K62

    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类型系统使得开发者可以明确定义对象和函数结构,这样在大型项目中维护和理解代码就更加简单。

    18040

    【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

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

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

    63930

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

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

    94131

    TypeScript 基础学习

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

    65300

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

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

    2.4K30

    10 个关于 TypeScript 小技巧

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

    1.3K10

    这 6 个 TS 新特性经常用到,用了之后我再也离不开它!

    在构造函数中直接定义属性 Typescript 可以通过构造函数参数直接定义属性,我们来先看早期做法: class Note { public title: string; public...,但它确实有,利用Typescript 提供简写形式 — 用构造函数参数直接定义属性。...这个简写语法做了很多: 声明了一个构造函数参数及其类型 声明了一个同名公共属性 当我们 new 出该类一个实例时,把该属性初始化为相应数值 空值合并 ??...用private关键字声明 TypeScript 字段将在编译后JavaScript代码成为常规字段。另一方面,私有类字段在编译后代码仍然是私有的。..., number] function setAddress(...args: Address) { // some code here console.log(args) } 当我们这样定义函数

    61220
    领券