从 Typescript 中的“或列表”(联合)中提取第一个标记[重复]

问题描述 投票:0回答:1

我想要一个像下面这样的泛型类型

F
,如果:

type X = F<'a'|'b'|'c'>

那么

X
应该是
'a'

如果

type X = F<'alpha'|'beta'|'gamma'|'delta'>

那么

X
应该是
'alpha'


以下方法不起作用

type F<T> = T extends (infer FirstToken | any) ? FirstToken : T

测试一下这里

typescript typescript-generics type-inference union-types
1个回答
0
投票

在 TS 中,您无法直接从字符串文字类型中提取第一个类型,因为它不是按顺序排列的 - 与数组或元组不同。

union 中的第一个概念在语言中并不存在。

但是,您可以使用分布式条件类型,其使用方式类似于从联合中提取“第一个”类型。

但是,重要的是要了解这种行为是 TS 处理条件类型的结果,并且不能保证始终按您的预期工作。

在这里测试

© www.soinside.com 2019 - 2024. All rights reserved.