如何从打字稿中的标记联合类型中提取类型?
Posted
技术标签:
【中文标题】如何从打字稿中的标记联合类型中提取类型?【英文标题】:How to extract a type from a tagged union type in typescript? 【发布时间】:2019-03-27 08:10:43 【问题描述】:假设已经有一个类型定义如下:
export type Item =
type: 'text',
content: string
|
type: 'link',
url: string
是否可以从Item
类型中提取link
部分?我的意思是,是否可以定义一个类型ExtractTypeFrom
:
type LinkItem = ExtractType<Item, 'type', 'link'>
LinkItem
将是:
type: 'link',
url: string
【问题讨论】:
【参考方案1】:是的,您可能非常接近,您可以使用预定义的Extract
条件类型。作为第二个参数,您可能需要传入一个类型,该类型可以是您正在寻找的类型的基本类型:
type LinkItem = Extract<Item, type: 'link' > // will be type: "link"; url: string;
【讨论】:
太棒了,谢谢!如果你想要一个“Extractor”类型,你可以像这样定义它:type ItemExtractor<Match extends Partial<Item>> = Extract<Item, Match>
,然后你可以像这样使用它:type LinkItem = ItemExtractor< type: 'link' >
其中泛型参数 type: 'link'
被类型检查为实际上是@的有效案例987654326@.
我喜欢 OP 的猜测与真实答案的接近程度 :-) 比我的尝试更好,即 Item & type: 'link'
(但不起作用)
还有一个令人惊讶的简单定义:) type Extract<T, U> = T extends U ? T : never;
以上是关于如何从打字稿中的标记联合类型中提取类型?的主要内容,如果未能解决你的问题,请参考以下文章