【发布时间】:2020-05-23 11:47:30
【问题描述】:
给定一个像这样的有区别的联合类型:
type HomeRoute = { name: 'Home' };
type PageRoute = { name: 'Page'; id: number };
type SearchRoute = { name: 'Search'; text: string; limit?: number };
type Route = HomeRoute | PageRoute | SearchRoute;
我想要一个实用程序类型,它采用联合类型及其判别式(这里是名称成员的类型:"Home" | "Page" | "Search")并返回匹配的大小写:
type Discriminate<TUnion, TDiscriminant> = ???
type TestHome = Discriminate<Route, 'Home'>; // Expecting "HomeRoute" (structure)
type TestPage = Discriminate<Route, 'Page'>; // Expecting "PageRoute" (structure)
【问题讨论】:
-
有趣,但什么是动力。判别式应被视为实现细节
-
@MaciejSikora:我需要一些提示来给这个answer。
Extract实用程序类型就足够了,但是您和@Titian 通用答案都非常有趣。谢谢
标签: typescript