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

typescript 4.1中rest参数的数组和条件递归类型

TypeScript 4.1中引入了rest参数的数组和条件递归类型。

  1. Rest参数的数组:在函数定义时,可以使用rest参数语法(...)来表示接收一个不定数量的参数,并将它们作为数组进行处理。例如:
代码语言:txt
复制
function sum(...numbers: number[]) {
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3)); // 输出 6
console.log(sum(4, 5, 6, 7)); // 输出 22

在上面的例子中,sum函数使用rest参数语法接收任意数量的参数,并将它们存储在numbers数组中。函数内部使用数组的reduce方法对参数进行求和。

  1. 条件递归类型:TypeScript 4.1引入了新的条件类型语法来处理递归类型。条件递归类型可以根据条件的真假来决定返回的类型是什么。例如:
代码语言:txt
复制
type Flatten<T> = T extends Array<infer U> ? Flatten<U> : T;

type Numbers = [1, [2, [3, [4, 5]]]];
type Flattened = Flatten<Numbers>; // 类型为 [1, 2, 3, 4, 5]

在上面的例子中,我们定义了一个Flatten类型,它接受一个类型T作为参数。如果T是一个数组类型(使用extends Array<infer U>进行判断),则递归地调用Flatten类型,并将数组中的元素类型作为参数。如果T不是数组类型,则返回T本身。

在这个例子中,我们定义了一个Numbers类型,它是一个嵌套数组类型。使用Flatten类型将Numbers类型展开为单层的数组类型[1, 2, 3, 4, 5]

这样的条件递归类型可以在很多场景下使用,比如处理嵌套的对象结构或者数组结构。

关于 TypeScript 4.1中的rest参数的数组和条件递归类型的详细信息,可以参考腾讯云官方文档中的相关章节:

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

相关·内容

TypeScript基础类型:原始类型、对象类型数组类型、元组类型、枚举类型联合类型

TypeScript 强大类型系统使得开发者能够更轻松地编写可维护、可扩展代码。本文将详细介绍 TypeScript基础类型,包括原始类型、对象类型数组类型、元组类型、枚举类型联合类型。...// 字符串数组元组类型元组类型用于表示一个固定长度类型数组。...可以使用 (参数类型) => 返回值类型 语法来声明函数类型。...类型推断类型断言TypeScript 具有强大类型推断能力,它可以根据上下文自动推断变量类型。例如,如果我们在定义变量时直接赋值,TypeScript 可以推断出变量类型。...总结本文详细介绍了 TypeScript 基础类型,包括原始类型、对象类型数组类型、元组类型、枚举类型联合类型等方面。

59130

深入 TypeScript 高级类型类型体操

TypeScript 高级类型是通过 type 定义类型参数(也叫泛型)类型,它会对传入类型参数做一系列类型计算,产生新类型。...TypeScript 高级类型会根据类型参数求出新类型,这个过程会涉及一系列类型计算逻辑,这些类型计算逻辑就叫做类型体操。...既然说该有的语法都有,那我们来看下循环判断都怎么做: ts 类型条件判断 ts 类型条件判断语法是 条件 ? 分支1 : 分支2 。...我们要构造一个长度为 n 数组,那么就要传入长度类型参数 Len、元素类型参数 Ele、以及构造出数组类型参数 Arr(用于递归)。...ResStr : RepeactStr; 我们递归构造了数组字符串,判断构造数组 length 如果到了

3.7K41
  • TypeScript 类型体操 - 基础操作

    TypeScript 高级类型支持类型参数,可以做各种类型运算逻辑,返回新类型函数调用是对应,自然也支持递归TypeScript 类型系统不支持循环,但支持递归。...类型系统中高级类型也同样支持递归,在类型体操中,遇到数量不确定问题,要条件反射想到递归。...# 数值计算 TypeScript 类型系统中没有加减乘除运算符,但是可以通过构造不同数组然后取 length 方式来完成数值计算,把数值加减乘除转化为对数组提取构造。...当类型参数为联合类型,并且在条件类型左边直接引用该类型参数时候,TypeScript 会把每一个元素单独传入来做类型运算,最后再合并成联合类型,这种语法叫做分布式条件类型。...any 作为类型参数出现在条件类型左侧时,会直接返回 trueType falseType 联合类型

    1.9K60

    TypeScript 中实现自定义“包含”实用程序类型

    Includes 实用类型用于检查给定类型是否包含在元组或数组类型中。它在概念上类似于 JavaScript 数组 .includes() 方法,但适用于类型。...TypeScript 关键概念在开始之前,让我们讨论一些对于理解我们实现至关重要 TypeScript 概念:条件类型:允许定义一个类型,它可以根据某些条件具有不同形式,类似于 if 语句,但用于类型...true : Includes : false;让我们看看发生了什么:条件类型:检查元组每个元素。...如果相等,则返回 true;否则,递归调用 Includes 处理其余部分(Rest)。...它帮助您了解利用条件类型递归类型严格类型比较等高级概念。这不仅增强了您 TypeScript 技能,还会产生更健壮可维护代码。

    15500

    TypeScript 演化史 -- 11】泛型参数默认类型 --strict 编译选项

    TypeScript 2.3 增加了对声明泛型参数默认类型支持,允许为泛型类型类型参数指定默认类型。...接下来看看如何通过泛型参数默认将以下React组件从 JS (JSX)迁移到 TypeScript (TSX): class Greeting extends React.Component {...因为咱们将 props state 类型设置为 any,所以 TypeScript 编译器也帮不上什么忙。...; } } 1) GreetingProps 是类型参数Props类型参数 2) 类似地,any是类型参数 State 类型参数 有了这些类型,咱们组件得到更好类型检查自动提示...泛型参数默认类型TypeScript 2.3 开始,咱们可以为每个泛型类型参数添加一个默认类型

    1.8K30

    TypeScript 类型体操:数组长度实现数值运算

    TypeScript 类型系统中没有加减乘除运算符,但是可以通过构造不同数组然后取 length 方式来完成数值计算,把数值加减乘除转化为对数组提取构造。...Rest['length'] : never; 类型参数 Num1、Num2 分别是被减数减数,通过 extends 约束为 number。...类型参数 CountArr 是做计数数组,默认值 [] 代表从 0 开始。 每次通过模式匹配提取去掉一个字符之后剩余字符串,并且往计数数组里多放入一个元素。递归进行取字符计数。...可以正确算出第 8 个数是 21: 总结 TypeScript 类型系统没有加减乘除运算符,所以我们通过数组类型构造提取,然后取长度方式来实现数值运算。...我们通过构造提取数组类型实现了加减乘除,也实现了各种计数逻辑。 用数组长度做计数这一点是 TypeScript 类型体操中最麻烦一个点,也是最容易让新手困惑一个点。

    1.2K30

    TS 类型体操:图解一个复杂高级类型

    之前我们零散地了解了一些 TypeScript 类型体操套路,但是没有综合练习下,今天就来做个高难度体操,它会综合运用模式匹配、构造、递归等套路,对提升类型编程水平很有帮助。...我们要实现高级类型如下: 它类型参数参数字符串 query string,会返回解析出参数对象,如果有同名参数,会把值做合并。...比如提取 a=b 中 a b: 这种模式匹配套路在数组、字符串、函数等类型中都有很多应用。...比如指定 key value 来生成一个索引类型: 详细了解可以看之前一篇文章:TS 类型体操:索引类型映射再映射 递归 TypeScript 高级类型支持递归,可以处理数量不确定问题。...构造:通过映射类型语法来构造新索引类型,构造过程中可以对索引值做一些修改 递归:当处理数量不确定类型时,可以每次只处理一个,剩下递归来做 然后用这些套路来实现了一个 ParseQueryString

    50110

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

    Typescript 类型是支持 "条件判断" ❝人生总会面临很多选择,编程也是一样。...Typescript 类型是支持 "数据结构" 模拟真实数组 看到这里肯定有同学就笑了,这还不简单,就举例来说,Typescript 中最常见数据类型就是 数组(Array) 或者 元组(tuple...下面就引出了本小节真正 "数组":联合类型(Union Types) 说起 联合类型(Union Types) ,相信使用过 Typescript 同学一定对它又爱又恨: 定义函数入参时候,当同一个位置参数允许传入多种参数类型..."递归" Typescript类型也是可以支持递归递归相关问题比较抽象,这里还是举例来讲解,同时为了方便大家理解,我也会像第一节一样,把类型递归逻辑用 Javascript 语法描述一遍...如果触发结束条件,就直接返回,否则就一直地递归调用下去,所传递第二个参数用来保存上一次递归计算结果。

    3.4K20

    TypeScript 演化史 — 第十一章】泛型参数默认类型 –strict 编译选项

    image.png TypeScript 2.3 增加了对声明泛型参数默认类型支持,允许为泛型类型类型参数指定默认类型。...接下来看看如何通过泛型参数默认将以下React组件从 JS (JSX)迁移到 TypeScript (TSX): class Greeting extends React.Component {...因为咱们将 props state 类型设置为 any,所以 TypeScript 编译器也帮不上什么忙。...; } } GreetingProps 是类型参数Props类型参数 类似地,any是类型参数 State 类型参数 有了这些类型,咱们组件得到更好类型检查自动提示: image.png...泛型参数默认类型TypeScript 2.3 开始,咱们可以为每个泛型类型参数添加一个默认类型

    1.7K20

    TypeScript 4.3 新功能实践应用

    比如判断一个类型是不是数组类型,如果是,就返回数组元素类型。 type Flatten = T extends unknown[] ?...元组 tuple 模版字符串类型 template string type 递归操作 这一小节之前内容都只算热身,这一小节递归泛型是本文核心。...这一小节将在条件泛型 infer 基础上引入 tuple template string 递归操作。...具体到 JoinTupleToTemplateStringType 实现,除了条件类型 infer 使用,我们还使用了一个威力巨大 TS 泛型特性:递归。...在目前主流编程语言中,绝大部分都是以循环为主,甚至很多人可能听过一些「不要写递归」之类说法。但在 TS 泛型层面,我们只能使用递归条件来实现一些有趣泛型函数。

    1.1K30

    一道 3 层 TypeScript 面试题,你能答到第几层?

    ,合并之后放到数组里,然后继续处理下一个,递归进行这个流程,直到数组为空即可。...: 直接通过 function 声明函数: function func() {} 和声明匿名函数然后赋值给变量: const func = () => {} 而参数返回值类型都是数组,只是具体类型不知道...也就是这样: 声明两个类型参数 Target、Source,约束为 unknown[],也就是元素类型任意数组类型。 这俩类型参数分别是传入两个参数类型。 返回值通过 Zip 计算得出。...然后对剩下数组递归进行这样处理,直到数组为空。...第二层给函数加上类型,用 function 声明类型 interface 声明函数类型两种方式,参数返回值都是 unknown[]。

    78830

    TypeScript类型元编程入门指南

    众所周知,TypeScript类型系统因其高度灵活性而常常被戏称“类型体操”。各路高人纷纷在类型系统上卷了起来,实现了各种不可思议功能。 最近徐飞叔叔还写了个中国象棋,可以说很卷了。...zhuanlan.zhihu.com/p/426966480 其实复杂类型操作并非无迹可寻,本文就试图从元编程角度挖掘一下类型系统潜力,希望能够帮助你抓到一些思路脉络。...元编程基础是图灵完备子系统,那么TypeScript类型系统是否是图灵完备呢?答案当然是肯定TypeScript类型系统extends ?...构成了分支能力,而允许递归,则形成了循环能力,加上类型依赖本身可以形成顺序结构,满足了图灵完备要求。...递归 递归是一切复杂类型操作基石,在缺少减法比较运算情况下,我们只能利用元组长度extends来实现比较,以下代码形成了一个定长列表: type List<Type, n extends number

    25300

    TypeScript 4.1 发布,新增模板字面量类型

    作者 | Dylan Schiemann 译者 | 王者 TypeScript 团队发布了 TypeScript 4.1,其中包括功能强大模板字面量类型、映射类型键重映射以及递归条件类型。...社区提供了很多有趣模板字符串文本示例,包括 querySelector、路由器参数解析、表达式解析、JSON 解析序列化、GraphQL 类型 AST、SQL 查询验证、CSS 解析、游戏、拼写检查...TypeScript 4.1 另一个重要新增功能是递归条件类型,可以更容易地支持数组或复杂 promise 树扁平化方法。条件类型现在可以立即在分支中引用自己,从而更容易创建递归类型别名。...TypeScript 团队警告说,这个模式应该谨慎使用,避免递归类型检查速度变慢,而且如果超出了受支持递归深度,TypeScript 编译器将会抛出编译时错误。...resolve 参数现在在 promise 中是必需TypeScript 4.1 包含了一个快速修复,以简化升级过程。 条件扩展可创建可选属性。 不匹配参数不再相关。

    2.5K20

    Type Script 基本概念及常用语法

    图片TypeScript 是一种由微软开发自由开源编程语言,它作为 JavaScript 一个超集,扩展了JavaScript 语法,而且本质上向这个语言添加了可选静态类型基于类面向对象编程...TypeScript五种类型声明,分别是字符串 String、数字 Number、布尔值 Boolean、多种类型 Any、没有类型 Void,只需在参数名称后面用冒号来指定参数类型即可 还有一种自定义类型...,在参数顺序中,必选参数不可以在可选参数后面,也就是说,可选参数要么放在最后,要么后面接可选参数,或有带默认值参数 函数新特性 Rest and Spread 操作符 ......:用来声明任意数量方法参数 Rest and Spread 操作符还有一个反过来用法,虽然在 Complier 中有会报错提示,但却是能够成功运行 第一次调用,由于方法定义 3 个参数,而 args...,而for of遍历数组元素值,除此之外,for of还能根据某个条件终止循环,其余两者均不能终止 此外,for of 循环还能循环字符串

    2.1K30

    如何在 TypeScript 中使用函数

    注意:请记住,对 JavaScript 中函数有效所有内容也对 TypeScript函数有效。 函数类型 在前面的内容中,我们向 TypeScript函数参数返回值添加了类型。...foundUser) { return null; } return foundUser; } 为 Rest 参数添加类型 剩余参数是 JavaScript 中一项功能,它允许函数以单个数组形式接收许多参数...在本节中,我们将在 TypeScript 中使用剩余参数。 通过使用 rest 参数后跟结果数组类型,完全可以以类型安全方式使用 rest 参数。...这些守卫在条件代码块中强制执行某些类型,其中值类型可能会根据情况而有所不同。这些在使用 Array.prototype.filter 函数返回过滤数据数组时特别有用。...有条件地向数组添加值时一项常见任务是检查某些条件,然后,仅在条件为真时才添加值。如果该值不为真,则代码向数组添加一个假布尔值。

    15K10

    扩展名、新语法、新工具类型

    条件类型递归省略 Tail-Recursion Elimination on Conditional Types 我们使用 TS 类型别名时,常常会遇到需要循环引用类型别名自身情况,TS 编译器会检测到可能存在无限嵌套情况并给出警告...,你可能遇到过这种基于 infer 条件类型来提取字符串情况: type TrimLeft = T extends ` ${infer Rest}` ?...而反例则是去额外使用了条件类型判断结果,如 type GetChars = S extends `${infer Char}${infer Rest}` ?...递归处理条件类型,由于是尾递归所以没问题 与循环引用自身不一样 检测到条件类型分支仍然是条件类型时,智能组织 避免导入语句被省略 Disabling Import Elision 在 TypeScript...4.5 中,专门新增了 ImportCallOptions 来作为动态导入第二个参数类型定义。

    1.4K30

    TypeScript 4.0正式发布!现在是开始使用它最佳时机

    类型系统方面,我们加入了递归类型别名引用对断言样式函数支持,这两者都是独特类型系统特性。...这意味着即使我们不知道要操作实际类型,也可以表示对元组和数组高阶操作。在这些元组类型中实例化泛型 spread(或用真实类型替换)时,它们可以产生其他数组元组类型集。...4.0 改进了 rest 参数 rest 元组元素推断过程,因此我们可以类型化它并使其“正常工作”。...对 rest 参数使用元组类型是其中关键。...type Range = [start: number, end: number]; 为了进一步加强参数列表元组类型之间联系,我们让 rest 元素可选元素语法与参数列表语法一致。

    2.4K10

    精读《Typescript 4.5-4.6 新特性》

    也许有时不想随着 TS 版本升级而升级连带 dom 内置类型,所以 TS 提供了一种指定 dom lib 类型方案,在 package.json 申明 @typescript/lib-dom 即可:...,但现在才支持按照模版字符串在分支条件时,做类型收窄。...尾递归优化 TS 类型系统支持尾递归优化了,拿下面这个例子就好理解: type TrimLeft = T extends ` ${infer Rest}` ?...值得注意是,这种类型推导是从前到后,因为参数是自左向右传递,所以是前面推导出后面,而不能是后面推导出前面(比如不能理解为,第二个参数为 number 类型,那第一个参数值就必须为 a)。...顺便说一句,用了 TS 就尽量不要用 JSDoc,毕竟代码类型分离随时有不一致风险产生。

    67620
    领券