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

TypeScript条件类型

条件类型(Conditional Types)是TypeScript中一种强大类型系统特性,它允许我们根据类型关系来推断和选择类型。...根据条件结果,返回不同字符串类型。分布式条件类型条件类型还可以在联合类型上使用,这称为分布式条件类型。当我们传入一个联合类型参数时,条件类型会遍历每个成员,并根据条件进行推断。...MyType嵌套了两个条件类型,根据输入类型T不同,返回不同类型。...条件类型TypeScript类型系统一个重要部分,它允许我们在类型级别上进行条件分支和类型选择。通过巧妙地组合泛型、联合类型条件类型,我们可以定义出非常复杂且强大类型。...在实际应用条件类型通常与内置预定义条件类型(如Exclude、Extract、NonNullable等)结合使用,以实现更加复杂和有用类型转换和操作。

20940

TypeScript条件类型(十)

TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS三元运算符用法一样,通过判断得到最终结果,TS...条件类型最终得到是数据类型。...| {}> // "function" | "object"二、分布式条件类型条件类型,如果被检查类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型...> string | boolean 不是 boolean 类型,也不是其他原始类型四、结合范型使用1.类型删除在联合类型T删除联合类型U成员,T类型剩余成员则组成新类型。...never : T;type A = Diff; // "b"在联合类型T过滤出联合类型U成员,过滤出来成员则组成新类型

16920
您找到你想要的搜索结果了吗?
是的
没有找到

TypeScript】TS条件类型(十二)

TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS三元运算符用法一样,通过判断得到最终结果,TS...条件类型最终得到是数据类型。...| {}> // "function" | "object"二、分布式条件类型条件类型,如果被检查类型是一个 “裸” 类型参数,即没有被数组、元组或 Promise 等包装过,则该条件类型被称为分布式条件类型...> string | boolean 不是 boolean 类型,也不是其他原始类型四、结合范型使用1.类型删除在联合类型T删除联合类型U成员,T类型剩余成员则组成新类型。...never : T;type A = Diff; // "b"在联合类型T过滤出联合类型U成员,过滤出来成员则组成新类型

18110

TypeScript 条件类型精读与实践

在大多数程序,我们必须根据输入做出决策。TypeScript 也不例外,使用条件类型可以描述输入类型与输出类型之间关系。 本文同步首发在个人博客,欢迎订阅、交流。...工具类型 心细读者可能已经发现了 Demo 类型声明过程其实就是 TypeScript 官方提供工具类型 Exclude 实现原理,其用于将联合类型...Type 满足 keys 类型属性值。...true : false) 在 TypeScript 类型定义,若在箭头函数中使用 extends 也是同理,由于从左向右阅读习惯,也会导致阅读者对类型代码执行顺序感到困惑。...Curry, R> : R) 结合类型推导使用条件类型TypeScript ,一般会结合 extends 来使用类型推导 infer 语法。使用它可以实现自动推导类型目的。

69820

TypeScript系列教程九《类型转换》-- 条件类型

TrueType : FalseType; 当extends左边类型可分配给右边类型时,您将在第一个分支获得该类型(“true”分支);否则,您将在后一个分支(“false”分支)获得类型。..."hello" : 42); // let c: NameLabel | IdLabel 条件类型约束 通常,条件类型检查会为我们提供一些新信息。...条件类型使用infer 我们只是发现自己使用条件类型来应用约束,然后提取类型。这是一个非常常见操作,条件类型使它变得更容易。...Item : Type; 在这里,我们使用infer关键字声明性地引入一个名为Item新泛型类型变量,而不是指定如何在true分支检索T元素类型。...无法基于参数类型列表执行重载解析。

68520

索引类型、映射类型条件类型_TypeScript笔记12

(n => o[n]); } pluck函数能从o摘出来names指定那部分属性,存在2个类型约束: 参数names只能出现o身上有的属性 返回类型取决于参数o身上属性值类型 这两条约束都可以通过泛型来描述...string : number(即条件不确定情况),因为f(x)x类型U尚不确定,无从得知U是不是Foo类型。...type)中被检查类型是个裸类型参数(naked type parameter)。...y = x; } 条件类型类型推断 在条件类型extends子句中,可以通过infer声明引入一个将被推断类型变量,例如: type ReturnType = T extends (......TypeScript 还内置了一些常用条件类型: // 从 T 中去掉属于 U 类型部分,即之前示例 Diff type Exclude = T extends U ?

1.6K10

TypeScript 函数 this 参数

TypeScript 2.0 开始,在函数和方法我们可以声明 this 类型,实际使用起来也很简单,比如: function sayHello(this: void) { // this:...void:表示在函数体内不允许使用this } 在上面的 sayHello 函数,this 参数是伪参数,它位于函数参数列表第一位。...在 getArea 方法我们没有使用 this 参数,此时 this 类型是 this,如下图所示: ?...Rectangle 长方形类不同,在 getArea 方法,我们使用了 this 参数,之后 this 类型是 Rectangle 类型,如下图所示: ?...在 Rectangle 长方形类 getArea 方法 this 入参只是作为一个形式上参数,供 TypeScript 做静态检查时使用,编译后并不会生成实际入参。

7.3K10

TypeScript类型断言

本文是关于 TypeScript type assertions ,它与其他语言中类型强制转换有相似之处,并通过 as 运算符执行。...在 B 行,我们看到此类型不允许访问任何属性。 在 C 行,我们用类型断言(运算符 as)告诉 TypeScript data 是一个Array。现在就可以访问属性 .length 了。...类型断言是不得已方法,应尽可能避免。他们(暂时)删除了静态类型系统为我们提供安全网。 注意,在 A 行,我们还覆盖了 TypeScript 静态类型,不过是通过类型注释完成。...类型断言替代语法 TypeScript 对于类型断言有另一种“尖括号”语法: 1>data 该语法已经过时,并且与 React JSX 代码(在 .tsx 文件)不兼容。...10 // 在类型“ {}”上没有找到参数类型为'string'索引签名。

3.7K40

TypeScript 官方手册翻译计划【九】:类型操控-条件类型

number : string; ^ // type Example2 = string 条件类型形式有点像 JavaScript 条件表达式(条件 ?...TrueType : FalseType; 当 extends 左边类型可以赋值给右边类型时,最终得到就是第一个分支(真分支)类型,否则得到第二个分支(假分支)类型。..."hello" : 42); ^ // let c: NameLabel | IdLabel 条件类型约束 通常情况下,条件类型检查会给我们提供一些新信息。...在条件类型中进行推断 在上面的例子,我们使用条件类型去应用约束并提取出类型。由于这种操作很常见,所以条件类型提供了一种更简单方式来完成。...条件类型提供了 infer 关键字,让我们可以推断出条件某个类型,并应用到真分支

78220

TypeScript接口参数响应类型自动推导

TypeScript Web 项目的API 参数与响应数据类型,如果不手动映射,默认是缺失: async function sendRequest(url: string, params?...: AxiosRequestConfig): Promise; } 复制代码 具体做法是指定泛型 T参数,来让 TS 推导出响应数据类型,修改初始代码: // 假定接口A路径是 '/apple...指定参数类型 映射参数类型是简单, 只需要在 params 参数指定: // 假定接口A路径是 '/apple', 参数类型是 AppleReq, 响应类型是 AppleRes interface...res']>(url, { params }) return response } 复制代码 说明: T extends ApiKeys = ApiKeys表示以上泛型 T 是 ApiKeys 集合一个...= ApiKeys 则是泛型默认值,如果我们没有传入泛型参数时候,TS可以使用实际传入参数类型作为默认类型

1.5K20

TypeScript 数组类型定义

TypeScript 声明和初始化数组也很简单,和声明数字类型和字符串类型变量也差不多,只不过在指定数组类型时要在类型后面加上一个括号 [] 语法格式 const array_name: dataype...array: Array = ['孟浩然', 99]; 除了使用括号 [] 方法来声明数组,你还可以使用 数组泛型 来定义数组 语法格式 const array_name..., val2, val3],[v1, v2, v3]]; // 等同于 const array_name: datatype[][] = [[val1, val2, val3]]; 多维数组类型 TypeScript...等同于 const test: string[][] = [['狮子头', '清蒸鲈鱼', '鲜椒牛蛙'], ['北京烤鸭'], ['地锅鸡', '饿了']]; 声明一个二维数组 注意: 以下示例类型在数组...个 建议: 在定义数组类型时候使用数组泛型定义,这样显得更直观一点 Tuple 元组类型(元组类型允许表示一个已知元素数量和类型数组)

5.3K40

实现TypeScript互斥类型

此时,你会怎么用TypeScript来定义这个类型?本文将带大家实现一个互斥类型来解决这个问题,欢迎各位感兴趣开发者阅读本文。 前置知识 在实现之前,我们需要先来了解几个基础知识。...: string }; never类型TypeScript它有一个特殊类型never,它是所有类型类型,无法再进行细分,也就意味着除了其本身没有类型可以再分配给它。...TS中提供了一个名为Exclude函数,它可以用来做这件事,接受两个参数: UnionType 联合类型 ExcludedMembers 需要进行剔除属性 使用方法如下所示: type P = Exclude...接下来,我们来梳理下实现思路: 实现一个排除类型,用于从A对象类型剔除B对象类型属性,并将排除后属性类型设为never,得到一个新对象类型。...> & T); 注意:为了类型可复用性,我们使用了泛型,对此不熟悉开发者请移步:TypeScript中文网——泛型 测试用例 我们将文章开头所说问题代入上述实现代码,看一下它能否将其解决,如下所示

3K40
领券