给定一个像这样的受歧视联合类型:
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)
您可以使用Extract
预定义条件类型:
type HomeRoute = { name: 'Home' };
type PageRoute = { name: 'Page'; id: number };
type SearchRoute = { name: 'Search'; text: string; limit?: number };
type Route = HomeRoute | PageRoute | SearchRoute;
type TestHome = Extract<Route, { name: 'Home' }>;
type TestPage = Extract<Route, { name: 'Page' }>;
您还可以创建通用版本Discriminate
但不确定这是否值得,因为您也需要该字段:
type Discriminate<TUnion, TField extends PropertyKey, TDiscriminant> = Extract<TUnion, Record<TField, TDiscriminant>>
type TestHome = Discriminate<Route, 'name', 'Home'>; // Expecting "HomeRoute" (structure)
type TestPage = Discriminate<Route, 'name', 'Page'>; // Expecting "PageRoute" (structure)
游乐场链接
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)