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

Typescript -如果不使用Exclude<>,如何从泛型类型中排除一个类型?

在Typescript中,如果不使用Exclude<>,我们可以使用交叉类型和Exclude<>实现从泛型类型中排除一个类型。

交叉类型允许我们将多个类型合并为一个新的类型。假设我们有一个泛型类型T,我们希望从中排除类型U,可以通过交叉类型来实现:

代码语言:txt
复制
type Exclude<U, T> = U & T extends T ? never : U;

上述代码中,我们使用交叉类型将U和T合并为一个新的类型。如果新类型可以赋值给T,则说明U是T的子类型,因此被排除。否则,U不是T的子类型,保留在新类型中。

下面是一个示例:

代码语言:txt
复制
type MyType = number | string | boolean;

type ExcludedType = Exclude<string, MyType>; // 排除string类型

// ExcludedType的结果为number | boolean

在这个示例中,我们定义了一个泛型类型MyType,并使用Exclude将字符串类型排除出去,得到ExcludedType类型为number | boolean

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上只是一些腾讯云的产品示例,其他云计算品牌商也有类似的产品可以实现相应的功能。

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

相关·内容

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

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

28330

TypeScript在项目开发的应用实践体会

虽然不能更改整个值,但是如果值是一个引用类型的话,依旧可以对其内部的属性进行修改。那么只读的概念上来说,显然不具备当前的能力。...image.png TypeScript当中必知必会的一个属性,在很多的时候,类型推导在开始时很难进行推倒。相比于使用 any 类型使用来创建可复用的组件要更好,因为会保留参数类型。...image.png 对于的实践来说,使用是需要一定理解,复杂的使用会非常的复杂。 工具类型 TypeScript当中也提供了一些非常好用的工具类型,能够配合我们更好的使用工具类型。...image.png Exclude & Extract Exclude:从一个联合类型排除掉属于另一个联合类型的子集 来看下,Exclude使用形式是Exclude如果T的属性在S不存在那么就会返回...image.png Extract:跟Exclude相反,一个联合类型取出属于另一个联合类型的子集 举一反三,如果Exclude是取差集,那么Extract就是取交集。

2.8K60

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

Generic Types() 类型是复用给定类型的一部分的一种方式。它有助于捕获作为参数传递的类型 T。 优点: 创建可重用的函数,一个函数可以支持多种类型的数据。...); // Output: "test" showType(1); // Output: 1 如何创建类型:需要使用并将 T(名称可自定义)作为参数传递。...声明了一个 GenericType 接口,该接口接收类型 T, 并通过类型 T来约束接口内 name 的类型 注:变量约束了整个接口后,在实现的时候,必须指定一个类型 因此在使用时我们可以将name...因此,通过使用Extract,即提取出了新的类型 {id:number}。 Exclude Exclude -- T 剔除可以赋值给 U 的类型。...与Extract不同,Exclude通过排除两个不同类型已经存在的共有属性来构造新的类型。它会T中排除所有可分配给U的字段。

1.5K30

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

Generic Types() 类型是复用给定类型的一部分的一种方式。它有助于捕获作为参数传递的类型 T。 优点: 创建可重用的函数,一个函数可以支持多种类型的数据。...); // Output: "test" showType(1); // Output: 1 如何创建类型:需要使用并将 T(名称可自定义)作为参数传递。...声明了一个 GenericType 接口,该接口接收类型 T, 并通过类型 T来约束接口内 name 的类型 注:变量约束了整个接口后,在实现的时候,必须指定一个类型 因此在使用时我们可以将name...因此,通过使用Extract,即提取出了新的类型 {id:number}。 Exclude Exclude -- T 剔除可以赋值给 U 的类型。...与Extract不同,Exclude通过排除两个不同类型已经存在的共有属性来构造新的类型。它会T中排除所有可分配给U的字段。

1.5K40

【TS】1294- 搞懂 TypeScript 的映射类型(Mapped Types)

概念介绍 TypeScript 的映射类型和数学的映射类似,能够将一个集合的元素转换为新集合的元素,只是 TypeScript 映射类型是将一个类型映射成另一个类型。...我们可以在编辑器,将鼠标悬停在 Partial名称上面,可以看到编辑器提示如下: image.png 拆解一下其中每个部分: type Partial:定义一个类型别名 Partial和...T; keyof T:通过 keyof操作符获取 T中所有 key,返回一个联合类型如果不清楚什么是联合类型,可以理解为一个数组); type User = { name: string;...for...in的 in,用来遍历目标类型的公开属性名; T[P]:是个索引访问类型(也称查找类型),获取 T P类型,类似 JS 的访问对象的方式; ?...Exclude 联合类型排除指定类型 用来指定的联合类型排除指定类型。 实现如下: type Exclude = T extends U ?

2.2K10

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

Generic Types() 类型是复用给定类型的一部分的一种方式。它有助于捕获作为参数传递的类型 T。 优点: 创建可重用的函数,一个函数可以支持多种类型的数据。...); // Output: "test" showType(1); // Output: 1 如何创建类型:需要使用并将 T(名称可自定义)作为参数传递。...声明了一个 GenericType 接口,该接口接收类型 T, 并通过类型 T来约束接口内 name 的类型 注:变量约束了整个接口后,在实现的时候,必须指定一个类型 因此在使用时我们可以将name...因此,通过使用Extract,即提取出了新的类型 {id:number}。 Exclude Exclude -- T 剔除可以赋值给 U 的类型。...与Extract不同,Exclude通过排除两个不同类型已经存在的共有属性来构造新的类型。它会T中排除所有可分配给U的字段。

94020

TypeScript进阶 之 重难点梳理

通常我们说,就是指定一个表示类型的变量,用它来代替某个实际的类型用于编程,而后再通过实际运行或推导的类型来对其进行替换,以达到一段使用程序可以实际适应不同类型的目的。...说白了,「就是预先确定的数据类型,具体的类型使用的时候再确定的一种类型约束规范」。 可以应用于 function、interface、type 或者 class 。...如果指定类型,就在定义的之后指定一个默认的类型 myLog(1) 「我们也可以把变量理解为函数的参数,只不过是另一个维度的参数,是代表类型而不是代表值的参数。」...Exclude 将某个类型属于另一个类型移除掉。...never : T; 以上语句的意思就是 如果 T 能赋值给 U 类型的话,那么就会返回 never 类型,否则返回 T,最终结果是将 T 的某些属于 U 的类型移除掉 举个栗子: type T00

3.8K20

实现TypeScript的互斥类型

: string }; never类型TypeScript它有一个特殊的类型never,它是所有类型的子类型,无法再进行细分,也就意味着除了其本身没有类型可以再分配给它。...TS中提供了一个名为Exclude的函数,它可以用来做这件事,接受两个参数: UnionType 联合类型 ExcludedMembers 需要进行剔除的属性 使用方法如下所示: type P = Exclude...接下来,我们来梳理下实现思路: 实现一个排除类型,用于A对象类型剔除B对象类型的属性,并将排除后的属性类型设为never,得到一个新对象类型。...实现代码 接下来,我们来看下代码的实现,如下所示: // 定义排除类型:将UT剔除, keyof 会取出T与U的所有键, 限定P的取值范围为T的所有键, 并将其类型设为never type Without...> & T); 注意:为了类型的可复用性,我们使用,对此不熟悉的开发者请移步:TypeScript中文网—— 测试用例 我们将文章开头所说的问题代入上述实现代码,看一下它能否将其解决,如下所示

3.1K40

TypeScript小笔记

陆陆续续文档上手TypeScript,发现仍然还是有很多不懂。 比如各种框架的常用类型,ts内置的常用类型,以及一些容易被忽略和遗忘的点,陆陆续续顺手把他们写到文章记录起来。...ResultType接受传入一个函数类型,返回值为函数的返回类型。...P : never; 复制代码 Exclude Exclude是进行排除联合类型的一部分内容,相对于下面的Omit操作符来说Omit是针对于key&value/接口形式的,而Exclude是针对于联合类型来操作的...| number 有 string, 有string就返回never,就代表将其排除 Omit 3.5 版本之后,TypeScript 在 lib.es5.d.ts 里添加了一个 ​Omit...Omit​ 类型让我们可以一个对象类型剔除某些属性,并创建一个新的对象类型

1K20

TypeScript 超详细入门讲解

在定义函数或类时,如果遇到类型不明确时就可以使用 首先我们需要在函数名后面,添加一个 ,用来定义一个 ,这里的 k 是自己随意取的,可以理解为是一个 k 类型,只有函数执行的时候,...我们才知道它具体是什么类型 function fn(a: k): k { return a } 我们可以直接条用具有的函数 fn(10) 像这里我们传入了一个数字 10 ,它会自动推断出这次的函数调用类型为...number 但是不是每一次都能自动推断出类型的,因此我们可以使用 类型断言 提前告知我们此次传入的数据类型 fn('hello') 我们也可以指定多个,建议用大写字母 function...: 20} 实现原理 keyof T 键名的联合类型,K 要删除的类型,通过 Exclude排除 K ,再通过 Pick 取出剩下的类型 Pick> 3...Exclude 联合类型删除几个类型 type Person = { name: string, age: number } const myName: Exclude<Person

66110

TypeScript 超详细入门讲解

在定义函数或类时,如果遇到类型不明确时就可以使用 首先我们需要在函数名后面,添加一个 ,用来定义一个 ,这里的 k 是自己随意取的,可以理解为是一个 k 类型,只有函数执行的时候,...我们才知道它具体是什么类型 function fn(a: k): k { return a } 我们可以直接条用具有的函数 fn(10) 像这里我们传入了一个数字 10 ,它会自动推断出这次的函数调用类型为...number 但是不是每一次都能自动推断出类型的,因此我们可以使用 类型断言 提前告知我们此次传入的数据类型 fn('hello') 我们也可以指定多个,建议用大写字母 function...: 20} 实现原理 keyof T 键名的联合类型,K 要删除的类型,通过 Exclude排除 K ,再通过 Pick 取出剩下的类型 Pick> 3...Exclude 联合类型删除几个类型 type Person = { name: string, age: number } const myName: Exclude<Person

70510

TypeScript 条件类型精读与实践

在大多数程序,我们必须根据输入做出决策。TypeScript例外,使用条件类型可以描述输入类型与输出类型之间的关系。 本文同步首发在个人博客,欢迎订阅、交流。...即当条件类型作用于类型时,联合类型会被拆分使用。...工具类型 心细的读者可能已经发现了 Demo 类型的声明过程其实就是 TypeScript 官方提供的工具类型 Exclude 的实现原理,其用于将联合类型...如果不想遍历的每一个类型,可以用方括号将给括起来以表示使用的整体部分。 type Demo = [T] extends [U] ?...true : false) 在 TypeScript类型定义,若在箭头函数中使用 extends 也是同理,由于左向右的阅读习惯,也会导致阅读者对类型代码的执行顺序感到困惑。

71020

如何进阶TypeScript功底?一文带你理解TS各种高级语法

文章并不会基础的 TS 语法开始讲解,如果你还不了解什么是 TypeScript 强烈建议阅读 TS 官方文档。...换句话说接口本身不需要,而在实现使用接口代表的函数类型时需要声明该函数接受一个参数。...趁热打铁我们来看看利用分发我们可以实现什么样的效果: 在 TypeScript 内部拥有一个高级内置类型 Exclude 意为排除,它的用法如下: type TypeA = string | number...= Exclude; 用法非常简单,Exclude 内置类型会接受两个类型参数。...它会构造一个新的类型,这个类型排除所有 TypeA 类型满足 symbol 的类型。 那么,如果让你来实现一个 Exclude 内置类型,你会如何实现呢?同学们可以结合分发自行思考下。

1.7K10

TypeScript 高级类型总结(含代码案例)

TypeScript 是一种类型化的语言,允许你指定变量、函数参数、返回的值和对象属性的类型。 以下是 TypeScript 高级类型使用方法总结,而且带有例子。...范类型 类型是一种用来重用给定类型的一部分的方式。它用来处理参数传入的类型 T。...(args: T) { console.log(args) } showType("test") // Output: "test" showType(1) // Output: 1 要构造一个类型...如果你有多个共享字段,Extract 将会提取所有相似的属性。 Exclude 与 Extract 不同,Exclude 通过排除已经存在于两个不同类型的属性来构造类型。...也就是说,如果在函数 showType() 中使用它,那么接收到的参数必须是字符串,否则 TypeScript 将会报错。 类型保护 类型保护使你可以用运算符检查变量或对象的类型

1.2K10

如何利用 TypeScriptExclude 提升状态管理与代码健壮性

什么是 Exclude 工具类型TypeScript ,Extract 工具类型是我们精确选择联合类型特定类型的利器,而 Exclude 则像一个筛子,过滤掉不需要的类型,只保留我们所需的部分...这是一种非常有价值的工具类型,能够联合类型移除指定的类型,使我们的类型定义更加简洁,并让代码库更加易于管理和减少错误。...接下来,我们来看一个实际的使用例子,展示如何在函数应用 Exclude 管理组件事件处理函数: function useComponentEventHandlers(handler: ComponentEventHandlers...Exclude 的高级应用:在 Zustand 中排除类型使用 我们将探讨一个更高级的用例,展示如何在 React 应用中使用 Zustand 进行状态管理和动作分发时应用 Exclude。...通过精心应用 ExcludeTypeScript 代码类型可以与它们的使用场景完美对齐,确保它们既相关又可靠。 它与 Extract 工具类型互补,提供了强大的类型管理功能。

8210

深入浅出 TypeScript

除了可以在函数中使用,还可以在类中使用,它既可以作用于类本身,也可以作用于类的成员函数。...「索引类型」进行实现 ,我们用「索引类型」 keyof T 把传入的对象的属性类型取出生成一个「联合类型」,这里的 U 被约束在这个「联合类型。...类型兼容性 本身就是不确定的类型,它的表现根据「是否被成员使用而不同」。...never : T; type TT = Exclude; // 2 Exclude 的作用是T中排除出「可分配」给U的元素。.../src"即表示要编译src文件夹下的所有文件以及子文件夹的文件 "exclude": [], // exclude表示要排除的、编译的文件,它也可以指定一个列表,规则和include一样,可以是文件或文件夹

2.8K30

聊聊TypeScript类型声明那些最佳实践

使用联合类型,我们可以声明一个类型可以是许多类型之一的组合,比如: type IWeather = 'sunny' | 'cloudy' | 'snowy' 一个比较晦涩概念,但它非常重要...,不同于联合类型使用更加灵活,可以为类型提供变量。...使用场景上说,type 的用途更加强大,局限于表达 object/class/function ,还能声明基本类型别名、联合类型、元组等类型: // 声明基本数据类型别名 type NewString...代码逻辑看,它的作用是返回一个不下蛋的动物,返回的类型指向的是Fish或Bird。但我如果只想在一群鸟挑出一个不下蛋的鸟呢?... Exclude 类型T移除部分属性U Exclude<IUserStateMode

1.5K20
领券