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

TypeScript:获取联合的可能类型的名称(作为字符串)?

在TypeScript中,要获取联合类型的名称作为字符串,可以使用类型谓词和条件类型的结合。

首先,通过类型谓词来创建一个联合类型的辨识函数,以判断某个变量是否是该联合类型的其中一个成员。例如,我们有一个联合类型 type MyUnion = string | number,可以创建一个辨识函数 isMyUnion

代码语言:txt
复制
function isMyUnion(value: unknown): value is MyUnion {
  return typeof value === 'string' || typeof value === 'number';
}

接下来,使用条件类型来获取联合类型的名称作为字符串。条件类型可以根据一个条件表达式的真假来选择两种不同的类型。通过使用条件类型的分支,我们可以获得联合类型的名称。

代码语言:txt
复制
type UnionToString<T> = T extends infer U ? U extends string ? U : never : never;

最后,将这两者结合起来,通过联合类型的成员应用辨识函数,并使用条件类型来获取联合类型的名称作为字符串:

代码语言:txt
复制
function getUnionTypeName<T extends MyUnion>(value: T): UnionToString<T> {
  if (isMyUnion(value)) {
    return typeof value === 'string' ? 'string' : 'number';
  }
  throw new Error('Invalid value');
}

这样,当我们调用 getUnionTypeName 函数时,将会根据输入值的类型返回相应的字符串类型名称。例如:

代码语言:txt
复制
console.log(getUnionTypeName('hello'));  // 输出:string
console.log(getUnionTypeName(123));      // 输出:number

这是一个关于TypeScript中获取联合类型的名称作为字符串的方法,希望对你有所帮助。对于更多关于TypeScript的信息,你可以访问腾讯云的TypeScript产品介绍链接:TypeScript产品介绍

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

相关·内容

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

TypeScript 强大类型系统使得开发者能够更轻松地编写可维护、可扩展代码。本文将详细介绍 TypeScript基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型联合类型。...例如:let num: number = 123;字符串类型字符串类型用于表示文本数据。可以使用 string 关键字来声明字符串变量。...也可以手动指定枚举成员数值。联合类型联合类型用于表示一个变量可以是多种类型之一。可以使用 类型1 | 类型2 | ... 语法来声明联合类型。...类型推断和类型断言TypeScript 具有强大类型推断能力,它可以根据上下文自动推断变量类型。例如,如果我们在定义变量时直接赋值,TypeScript 可以推断出变量类型。...总结本文详细介绍了 TypeScript 基础类型,包括原始类型、对象类型、数组类型、元组类型、枚举类型联合类型等方面。

59030
  • TypeScript 联合类型定义、使用场景和注意事项

    TypeScript 中,联合类型(Union Types)是一种用于表示变量或参数可以具有多种类型概念。它允许我们将多个类型一个或多个类型作为一个整体来使用。...本文将详细介绍 TypeScript 联合类型定义、使用场景和注意事项,并提供一些示例来帮助理解。定义联合类型TypeScript 中,可以使用 | 符号将多个类型组合成一个联合类型。...使用联合类型类型断言当我们使用联合类型变量时,有时候需要告诉 TypeScript 具体类型,以便进行相应操作。可以使用类型断言(Type Assertion)来实现。...类型保护TypeScript 提供了一些机制来帮助我们在使用联合类型时进行类型保护,以减少可能出现错误。以下是几种常见类型保护方法:类型判断使用 typeof 操作符可以判断一个变量类型。...通过灵活使用联合类型,我们可以处理多种类型变量,提高代码可读性和可维护性。在实际开发中,根据具体需求选择合适联合类型,有助于编写出更健壮和可靠 TypeScript 代码。

    94541

    SAS获取某目录下所有指定类型文件名称

    今天看到一个群友提一个问题:SAS中如何简单地获取某一目录下所有指定类型文件名称并赋值为宏变量?...用常规方法可能要20多行代码,如果用FILENAME PIPE只需要9行代码就可以轻松解决,语法如下: FILENAME fileref PIPE 'UNIX-command' ;filerefis...以获取程序所在目录下所有TXT文件名为例,实现代码如下: filename filelst pipe "ls ./*.txt | sed -e 's#.*/##; s#\..*$##' | paste...*$##是用来去掉文件后缀;命令paste,顾名思义就是将几个文件连接起来;选项-s作用是将每个文件作为一个处理单元;选项-d作用是用来设定间隔符。....*$##' | awk 'ORS=""|""'"; 不过这个命令有一个小问题,就是在最后会多出一个间隔符,需要在后续DATA步中处理一下。

    4.7K20

    TypeScript 演化史 -- 9】object 类型字符串索引签名类型点属性

    TypeScript 2.2 引入了一个新 object 类型。它表示任何非基本类型。...,TypeScript定义了几个具有相似名称但表示不同概念类型: object Object {} 上面已经讲过 object 类型,现在来看看 Object 和 {}。...Object]" obj.toString(); 字符串索引签名类型点属性 在 TypeScript 2.2 之前,如果想访问带有字符串索引签名类型任意属性,就必须使用[]符号,但不允许使用.符号访问...在许多情况下,不再需要像这样令人不快变通方法: // 笨拙方式 (portNumbers as any).http = 80; 请注意,类型必须定义显式字符串索引签名,以便用.符号访问对任意属性都是类型正确...给定适当字符串索引签名,在这些情况下,就会获得更少类型错误,并且不再需要使用类型注释注释点属性访问,这只是为了让编译器通过。

    1.3K10

    如何利用 TypeScript 判别联合类型提升错误处理与代码安全性

    让我们通过这篇文章,深入了解如何从判别联合类型中提取类型,进一步提升我们编码效率和代码可靠性。 什么是判别联合类型?...TypeScript魔法衣橱整理术 在TypeScript中,判别联合类型(Discriminated Unions)使用一个共同属性,称为判别属性(discriminant),来区分联合类型不同类型...如果没有判别联合类型,我们可能会这样组织: type Clothing = { material: string; sleeveLength?...: '看这张不同裤子' }); // TypeScript 类型错误:对象文字可能只能指定已知属性,且 `src` 不存在于 `{ type: "system"; event: string; }`...这个示例不仅展示了判别联合类型在处理复杂逻辑时强大功能,也强调了TypeScript在提高代码质量方面的重要作用。

    18010

    获取对象属性类型、属性名称、属性值研究:反射和JEXL解析引擎

    先简单介绍下反射概念:java反射机制是在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它任意方法和属性;这种动态获取信息以及动态调用对象方法功能称为java...反射是java中一种强大工具,能够使我们很方便创建灵活代码,这些代码可以在运行时装配。在实际业务中,可能会动态根据属性去获取值。...fields[i].getType()); fieldNames[i] = fields[i].getName(); } return fieldNames; } /** * 获取属性类型...getFieldValueByName(fields[i].getName(), o)); list.add(infoMap); } return list; } /** * 获取对象所有属性值...java代码并执行 * * @param jexlExp 需要转换字符串 * @param map 参数集合 * @return 方法执行结果 * 如: * String jexlExp

    6.4K50

    TypeScript 演化史 — 第九章】object 类型字符串索引签名类型点属性

    TypeScript 2.2 引入了一个新 object 类型。它表示任何非基本类型。...,TypeScript定义了几个具有相似名称但表示不同概念类型: object Object {} 上面已经讲过 object 类型,现在来看看 Object 和 {}。...Object]" obj.toString(); 字符串索引签名类型点属性 在 TypeScript 2.2 之前,如果想访问带有字符串索引签名类型任意属性,就必须使用[]符号,但不允许使用.符号访问...在许多情况下,不再需要像这样令人不快变通方法: // 笨拙方式 (portNumbers as any).http = 80; 请注意,类型必须定义显式字符串索引签名,以便用.符号访问对任意属性都是类型正确...给定适当字符串索引签名,在这些情况下,就会获得更少类型错误,并且不再需要使用类型注释注释点属性访问,这只是为了让编译器通过。

    1.5K30

    说说我对 TypeScript 索引签名 理解

    这样,TypeScript就会意识到你访问属性可能不存在 3.2 string 和 number 键 假设有一个数字名称字典: interface NumbersNames { [key:...当在属性访问器中作为键使用时,JavaScript隐式地将数字强制为字符串(names[1]与names['1']相同)。TypeScript也会执行这个强制。...乍一看,它们看起来很相似 我们知道,索引签名只接受 string、number 或 symbol 作为类型。如果你试图在索引签名中使用,例如,字符串字面类型联合作为键,这是一个错误。...但是我们可以使用字符串字面值联合来描述 Record中键 type Salary = Record...总结 如果你不知道你要处理对象结构,但你知道可能键和值类型,那么索引签名就是你需要

    1.7K20

    分享 30 道 TypeScript 相关面的面试题

    答案:联合类型是一种表示一个值可以属于多种类型之一方式。例如,如果函数接受字符串和数字作为参数,则可以将其键入为 function example(arg: string | number)。...语法可以是变量或变量作为类型。当您比 TypeScript 类型推断系统更了解变量类型时,例如在处理联合类型或任何类型时,它会很有用。...但是,TypeScript 不支持传统方法重载(您可以定义多个具有相同名称但参数不同方法)。 相反,您可以使用可选参数或联合类型来实现类似的功能。...30、解释在高级类型场景中如何以及为何使用 keyof 和 typeof 运算符。 答案:keyof 运算符生成给定类型已知公共属性名称并集,这对于限制可能字符串值或创建映射类型很有用。...typeof 运算符在类型上下文中使用时,获取变量、常量或对象文字类型,这对于基于现有对象形状创建类型非常有用,而无需手动重复其结构。

    77930

    2019年开始使用Typescript

    A: ${punchline} `; number 任何浮点数都给定为数字类型作为TypeScript一部分,支持四种类型数字文字是二进制,十进制,八进制和十六进制。...最佳通用类型推断 从多种可能类型中推断类型时,TypeScript使用最佳通用类型算法来选择适用于所有其他候选类型类型。...可是,并不限制你使用更具有描述性名称来表示你泛型类型。...在类型可以是多种类型之一情况下,使用|分隔符隔开不同类型选项来使用联合类型。...交集类型 交集类型使用&符号将多个类型组合在一起。这和(上面的)联合类型不同,因为联合类型是表示结果类型是列出类型之一,而交集类型则表示结果类型是所有列出类型集合。

    88020

    分享 40 道关于 Typescript 面试题及其答案

    属性名称后面的修饰符。可选属性可能存在于实现该接口对象中,也可能不存在。这是一个例子: interface Person { name: string; age?...答案:TypeScript“排除”实用程序类型允许您通过从联合中排除某些类型来创建新类型。它有助于创建联合类型子集。...答案:TypeScript模板文字类型允许您使用模板文字语法来操作类型字符串。它们提供了一种基于字符串模式创建复杂类型方法。...答:“keyof”关键字用于获取对象类型并集,“typeof”关键字用于获取类型。...答案:TypeScript 接口中索引签名允许您根据属性名称定义属性类型。它们用于定义具有动态属性名称对象。

    73030

    1.8W字|了不起 TypeScript 入门教程(第二版)

    作为开发者,这给了我们很大自由:TypeScript 允许我们对 any 类型值执行任何操作,而无需事先执行任何形式检查。...此外,对于联合类型来说,你可能会遇到以下用法: let num: 1 | 2 = 1; type EventNames = 'click' | 'scroll' | 'mousemove'; 以上示例中...5.2 可辨识联合 TypeScript 可辨识联合(Discriminated Unions)类型,也称为代数数据类型或标签联合类型。它包含 3 个要点:可辨识、联合类型类型守卫。...1.typeof 在 TypeScript 中,typeof 操作符可以用来获取一个变量声明或对象类型。...2.1 版本引入,该操作符可以用于获取某种类型所有键,其返回类型联合类型

    10.2K51

    TS 进阶 - 类型工具

    name: string, age: number, } 类型别名除了用于进行特定类型抽离封装,还能作为工具类型。...null 联合类型 type MaybeNull = T | null; // 可以确保处理了可能为空值属性读取和方法调用 function process(input: MaybeNull...可以使用 keyof 一次性获取这个对象所有的键字面量类型: interface Foo { propA: number; propB: boolean; propC: string; }...类型工具 创建新类型方式 常见搭配 类型别名 将一组类型/类型结构封装,作为一个新类型 联合类型、映射类型 工具类型类型别名基础上,基于泛型去动态创建类型 使用类型工具 联合类型 创建一组类型集合...映射类型 索引类型查询 从一个接口结构,创建一个由其键名字符串字面量组成联合类型 映射类型 索引类型访问 从一个接口结构,使用键名字符串字面量访问到对应键值类型 类型别名、映射类型 映射类型 从一个联合类型依次映射到其内部每一个类型

    87320

    在 TS 中如何处理特殊值

    1.1 添加 null 或 undefined 到类型中 在 TypeScript 中 null 是一个很好哨兵值,我们可以通过类型联合将其对应 null 类型添加到新类型中: // 这里null...现在,当我们使用 getNextLine() 方法返回值时,TypeScript 将强制我们考虑该函数两种可能返回值:字符串和 null,比如以下例子: function countComments...TypeScript 是严格区分值和类型: EOF(End Of File)是一个值。 联合类型操作符 | 第一个操作数必须是类型。...只要我们能够区分联合类型成员,那么其它联合类型也可以作为可辨识联合类型。...,但使用过程中要特别注意,要做好类型保护,否则在运行时可能会导致出现严重异常。

    2.4K10

    细数这些年被困扰过 TS 问题

    类型可以接受 key 类型字符串,值类型是 any 类型字段。...和 @Injectable() 最终会被转换成普通方法调用,它们调用结果最终会以数组形式作为参数传递给 __decorate 函数,而在 __decorate 函数内部会以 Device 类作为参数调用各自类型装饰器...'semlinker' 和 ' kakuqo' 这两个字符串作为参数调用 add 函数,并把调用结果保存到一个名为 result 变量上,这时候我们想当然认为此时 result 变量类型为 string...如果枚举中某个成员值使用显式方式赋值,但后续成员未显示赋值, TypeScript 会基于当前成员值加 1 作为后续成员值。...8.2 字符串枚举 除了数字枚举,我们还可以使用字符串作为枚举成员值: enum NoYes { No = 'No', Yes = 'Yes', } assert.equal(NoYes.No

    15.2K73

    深入理解 TypeScript Keyof 运算符,让你代码更安全、更灵活!

    一、如何定义 KeyOf 运算符 在 TypeScript 中,keyof 运算符用于获取用户定义值。它主要用于泛型,格式类似于联合运算符及其属性。keyof 运算符会检索用户指定索引。...keyof T 返回字符串字面量类型联合。字面量指的是赋值给常量变量固定值。由于 K 是一个字符串字面量类型,我们使用 extends 关键字对 K 进行约束。...在 TypeScript 中,当我们在具有显式键对象类型上使用 keyof 运算符时,它会创建一个联合类型。...类型安全配置对象: 当我们处理配置对象时,可以使用 keyof 来确保配置项名称是预定义有效值。 通过在对象类型上使用 keyof 运算符,我们可以创建联合类型,从而确保属性访问类型安全性。...关注我公众号「前端达人」,获取更多关于 TypeScript 和其他前沿技术精彩内容。让我们一起写出更优雅、更健壮代码!

    19510
    领券