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

TypeScript:是否可以使用` `never`‘删除标记联合的分支?

是的,TypeScript中可以使用never关键字来删除标记联合的分支。

在TypeScript中,联合类型是由多个类型中的一个组成的类型。当我们对一个联合类型进行操作时,可能需要根据不同的类型执行不同的逻辑。在某些情况下,我们希望从联合类型中排除某些分支,这时就可以使用never关键字。

never类型表示永远不会发生的类型,它可以用来表示不可能存在的分支。当我们使用never类型来定义一个变量时,该变量只能被赋值为never类型,因为它没有任何其他可能的值。

下面是一个示例,演示如何使用never关键字删除标记联合的分支:

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

function processValue(value: Foo): void {
  if (typeof value === 'string') {
    // 处理字符串类型
  } else if (typeof value === 'number') {
    // 处理数字类型
  } else {
    const exhaustiveCheck: never = value;
    // 使用never类型来删除标记联合的分支
    // 这里的exhaustiveCheck变量只能被赋值为never类型
    // 如果有其他分支被添加到Foo类型中,TypeScript编译器会给出错误提示
  }
}

在上面的示例中,我们使用typeof操作符来检查value的类型,并根据不同的类型执行不同的逻辑。最后一个else分支使用never类型来删除标记联合的分支,确保我们处理了所有可能的类型。

对于TypeScript中的never类型,它的应用场景不仅限于删除标记联合的分支,还可以用于其他一些高级类型操作,如类型推断、条件类型等。

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

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

相关·内容

这几个 TypeScript 类型,90% 的人说不出原因

对如何阅读 TypeScript 源码感兴趣同学,可以看我之前一篇文章:《我读 TypeScript 源码秘诀都在这里了》,或者看我刚上线掘金小册《TypeScript 类型体操通关秘籍》,小册里会带大家从源码解释各种类型原理...说明条件成立,boolean 是 union 或者 never 验证一下: 这里 flags 就是每一个位表示一种类型,然后通过位运算按位与来判断是否是那种类型: 这种方式占用空间小,计算速度快...1 : 2; type res = Test; debug 会发现并没有走到 mapType 那个分支,而走了另一个分支: 这就说明条件不满足,any 不是联合类型呀,我们也可以通过 flags...debug 会发现 never 也走到 mapType 这个分支了: 啥情况,never 又不是联合类型,咋分呀。...总结 TypeScript 类型系统有一些特殊设计: 条件类型当 checkType(左边类型)是类型参数时候,会有 distributive 性质,也就是传入联合类型时会把每个类型单独传入做计算

25020

TypeScriptnever 和 unknown 优雅之道

从上文我们知道,除了 never 自身,没有任何类型能赋值给 never。any 是否满足这个特性呢?...4.2 never 妙用 never 有以下使用场景: Unreachable code 检查:标记不可达代码,获得编译提示。 类型运算:作为类型运算中最小因子。...never : T // 运算过程 type NonNullable // 联合类型被分解成多个分支单独运算 => (string extends NullOrUndefined...never : null) // 多个分支得到结果,再次联合 => string | never // never联合类型运算中被消解 => string 4.2.3 Exhaustive...通过深入了解 never 和 unknown 在 TypeScript 类型系统中使用和地位,可以学习到不少类型系统设计和集合论知识,在实际开发中合理 narrow 类型,组织起可靠安全代码。

1.1K20

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

TrueType : FalseType; 当 extends 左边类型可以赋值给右边类型时,最终得到就是第一个分支(真分支)中类型,否则得到第二个分支(假分支)中类型。...就像使用类型保护实现类型收缩可以得到一个更具体类型一样,条件类型分支可以通过我们检查类型进一步地去约束泛型。...在这段代码中,TypeScript 抛出了一个错误,因为它无法确定 T 是否有 message 属性。...,并在 message 属性不存在时候默认使用 never 类型,应该怎么做呢?...Type[] : never; 如果我们给 toArray 传入一个联合类型,那么条件类型将会应用给联合类型每一个成员。

78720

TypeScript】TS条件类型(十二)

TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS中三元运算符用法一样,通过判断得到最终结果,TS...1.类型删除联合类型T中删除联合类型U中成员,T类型中剩余成员则组成新类型。...never : T;type A = Diff; // "b"在联合类型T中过滤出联合类型U中成员,过滤出来成员则组成新类型。...R : never;定义了FunctionReturnType条件类型,它会检查类型T是否为函数类型,如果是则通过infer获取函数返回值类型R,否则返回never类型。...T[K] : never;上面代码定义了类型为PropertyType,通过检查K是否是T一个属性名,如果是则返回该属性类型,否则返回never

18410

TypeScript条件类型(十)

TypeScript 2.8版本引入了条件类型(Conditional Types),TS条件类型可以进行类型选择,具体用法可以使用三元运算符实现,JS中三元运算符用法一样,通过判断得到最终结果,TS...1.类型删除联合类型T中删除联合类型U中成员,T类型中剩余成员则组成新类型。...never : T;type A = Diff; // "b"在联合类型T中过滤出联合类型U中成员,过滤出来成员则组成新类型。...R : never;定义了FunctionReturnType条件类型,它会检查类型T是否为函数类型,如果是则通过infer获取函数返回值类型R,否则返回never类型。...T[K] : never;上面代码定义了类型为PropertyType,通过检查K是否是T一个属性名,如果是则返回该属性类型,否则返回never

17720

理解 TypeScript 类型收窄

因此,TypeScript 能够从此代码块内联合类型中排除 null 类型,从而产生更窄类型,更易于使用。 此外,你还可以通过抛出异常或从分支返回,来收窄变量类型。...“ 或 ”可辨识联合“,它在 TypeScript应用范围非常广。...== undefined); // Type is (string | undefined)[] 可惜TypeScript 也无法理解你意图,但是如果你使用一个类型保护函数的话就可以: function...const check: never = foo; } } 注意在 else 分支里面,我们把收窄为 never foo 赋值给一个显示声明 never 变量。...通过这个示例,我们可以得出一个结论:使用 never 避免出现新增了联合类型没有对应实现,目的就是写出类型绝对安全代码。

4.6K20

TS 进阶 - 类型系统

联合类型 只需要比较一个联合类型是否可以被视为另一个联合类型子类型 即联合类型中每个成员在另一个联合类型中都存在对应成员 type Result1 = 1 | 2 | 3 extends 1...: 类型参数需要是一个联合类型 类型参数需要通过泛型参数方式传入,不能直接进行条件类型判断 条件类型中泛型参数不能被包裹 条件类型分布式特性作用: 将联合类型拆开,每个分支分别进行一次条件类型判断...in keyof T]: T[P]; // }; type Mutable = { -readonly [P in keyof T]: T[P]; }; 注意,对于结构声明来说,一个属性是否必须提供仅取决于其是否携带可选标记...,即使使用 undefined 甚至 never 也不能将其标记为可选。...true : false; // false 函数类型参数类型使用子类型逆变方式确定是否成立,返回值类型使用子类型协变方式确定是否成立。

1.1K50

Node.js 项目 TypeScript 改造指南(二)

了解基础库、第三方库中类型 写代码时,应注意基础库、第三方库中函数输入输出是否使用了 any,类型、接口是否直接、间接使用了 any。...结合 keyof、never、in 等特性,使 TypeScript 具有了一定程度上类型运算能力,可以让我们获得一个类型变体和衍生类型。...'object' : 'ref'] 如果 T 可以解释为联合类型,在条件判断中可以进行展开,除了联合类型,any、boolean、使用 keyof 得到索引类型,都可以展开。...我们可以给类型属性增加只读或者可选标记使用 - 号,可以把原本带有的只读和可选标记去掉,+ 代表增加,可以省略。...使用可辨识联合「Discriminated Unions[15]」可以让我们区分相似的类型。

3.5K10

TypeScript 4.7 beta 发布:NodeJs ES Module 支持、新类型编程语法、类型控制流分析增强等

' } 我们知道,对于可辨识联合类型各个类型分支,其每一分支属性类型之间应当是独立,而同一分支内部类型又应该关联。...而在这里,很明显三个分支类型并没有独立起来,否则每一分支 f 入参类型应当对应于此分支 v 类型。...无法使用 __dirname, __filename,require 这些全局变量或方法 因此在 4.7 版本,TypeScript 也将会读取这一配置字段来决定是否将文件作为 ESM 解析,以及如何查找这一文件导入模块...、构建产物是否使用 ESM 等。...我们可以使用它来判断类型兼容性、收窄或映射一组联合类型、配合 infer 提取类型片段(如,数组元素类型,函数参数类型,模板字符串类型某一部分)等。

5.8K30

以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

此规则本质是检查经过断言后类型子集是否仅剔除了空值部分,因此无需担心对于多种有实际意义类型分支联合类型误判。...如联合类型变量中每一条类型分支可能都需要特殊处理逻辑。...你也可以通过 TypeScript never 类型来实现实际代码检验: const strOrNumOrBool: string | number | boolean = false; if...{_exhaustiveCheck}`); } 这里通过编译时与运行时做了两重保障,确保为联合类型新增类型分支时也需要被妥善处理,你可以参考开头 never 类型 文章了解更多 never 相关使用...除了联合类型以外,你还可以通过 never 类型来确保每一个枚举成员都需要处理。

2.6K30

类型体操:探究 TypeScript 内置高级类型

never : T; 这里涉及到一个经常用到 条件语法:extends ? :,你可以把它类比为 JS 中三元表达式(即 condition ? a : b)。...回到我们 Exclude,逻辑就很清楚了,就是判断 T 是否为 U 子类,如果是的话,返回 never(效果是被丢弃);否则返回 T。...其实这是联合类型特殊逻辑,如果联合类型使用了 extends,它就会被打散,变成多个独立类型进行判断,最后再组合起来。...所以真正逻辑是, "a" | "b" | "c" 被打散,变成依次判断 "a" 、"b"、"c" 是否为 "b" 子类,分别得到 "a" 、never、"c",然后联合起来,就变成了 "a" |...TypeScript 类型是图灵完备可以实现各种判断、循环、加减逻辑。当然某些逻辑实现起来很繁琐就是了。 它语法也是与众不同:它做了 “压缩”。

76510

什么是 TypeScript 4.1 中模板字面类型?

我们可以通过输出 never 来过滤键,这样在某些情况下就不必使用额外 Omit 辅助类型: type Getters = { [K in keyof T as `get${Capitalize...这意味着如果我们需要访问上一个示例中 opts.path 之类属性,则必须检查其是否存在或使用非 null 断言运算符(后缀 !...abstract 成员不能被标记为 async 在另一个重大更改中,标记为 abstract 成员不能被再标记为 async。...因此,要修复您代码,必须删除 async 关键字: abstract class MyClass { // 在 TypeScript 4.1 中必须删除 async abstract async...owner, defaultUserId: 123, }; } 在TypeScript 4.1之前, getOwner 返回基于每个展开对象联合类型: { x: number } | {

3.9K10

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

never类型是 TypeScript 底层类型,表示从未出现类型。 分布式有条件类型 那么,为什么e 条件类型和never类型组合是有用呢?它有效地允许咱们从联合类型中删除组成类型。...| string[] | never | never; 因为never是每个类型子类型,所以可以联合类型中省略它: type NonNullableEmailAddress = string...TypeScript 通过逐个查找每个类型并创建联合类型来解决这个问题: type NonNullableUserPropertyKeys = | { name: "name"; email: never...咱们可以通过清除never类型来简化生成联合类型: type NonNullableUserPropertyKeys = "name"; User类型中唯一不可为空属性键是“name”。...>; // string 注意,推断类型变量(在本例中为U)只能在条件类型true分支使用

2.5K20

TypeScript】条件类型

条件类型(Conditional Types)是TypeScript中一种强大类型系统特性,它允许我们根据类型关系来推断和选择类型。...条件类型通常与泛型一起使用,使我们可以在类型级别上编写更加灵活和复杂代码。讲解基础用法基本语法条件类型基本语法如下:T extends U ?...根据条件结果,返回不同字符串类型。分布式条件类型条件类型还可以联合类型上使用,这称为分布式条件类型。当我们传入一个联合类型参数时,条件类型会遍历每个成员,并根据条件进行推断。...如果T可以赋值给U,则返回T;否则返回never类型。条件类型嵌套条件类型还可以相互嵌套,以构建更复杂类型逻辑。type MyType = T extends string ?...条件类型是TypeScript类型系统一个重要部分,它允许我们在类型级别上进行条件分支和类型选择。通过巧妙地组合泛型、联合类型和条件类型,我们可以定义出非常复杂且强大类型。

21340

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

从上面的例子来看,条件类型可能不会立即变得有用——我们可以告诉自己Dog是否扩展了Animal并选择数字或字符串!但是条件类型威力来自于将它们与泛型一起使用。...就像使用类型保护缩小范围可以为我们提供更具体类型一样,条件类型真正分支将通过我们检查类型进一步约束泛型。...在正确分支里面,TS知道T拥有message属性 作为另一个示例,我们还可以编写一个名为flatte类型,将数组类型展平为其元素类型,但在其他情况下不使用它们: type Flatten =...条件类型为我们提供了一种使用infer关键字从我们在true分支中比较类型中进行推断方法。...Type[] : never; 如果给ToArray传入一个联合类型,那么条件类型将会应用每一个联合类型成员,然后联合

68720
领券