Tho*_*art 3 generics union types typescript
TS 中有没有办法通过联合“分布”泛型类型?
type Container<A> = { value: A };
type Containers<string | number> = Container<string> | Container<number>
Run Code Online (Sandbox Code Playgroud)
(假设我们从上下文中知道何时应用Containersvs Container)
令人惊讶的是,类型推断会为你做到这一点:
type Container<T> = { value: T }
type Containers<T> = T extends infer A ? Container<A> : never;
Run Code Online (Sandbox Code Playgroud)
编译器足够聪明,可以将它们全部分离:
type C = Containers<string | number | {x: number} | {z: string} | boolean>
Run Code Online (Sandbox Code Playgroud)
type 按C以下方式扩展:
type C = Container<string> |
Container<number> |
Container<false> |
Container<true> |
Container<{
x: number;
}> |
Container<{
z: string;
}>
Run Code Online (Sandbox Code Playgroud)