TS 中有没有办法通过联合“分布”泛型类型?
type Container<A> = { value: A };
type Containers<string | number> = Container<string> | Container<number>
(假设我们从上下文中知道何时应用Containers
vs Container
)
令人惊讶的是,类型推断会为你做到这一点:
type Container<T> = { value: T }
type Containers<T> = T extends infer A ? Container<A> : never;
编译器足够聪明,可以将它们全部分离:
type C = Containers<string | number | {x: number} | {z: string} | boolean>
type C
扩展如下:
type C = Container<string> |
Container<number> |
Container<false> |
Container<true> |
Container<{
x: number;
}> |
Container<{
z: string;
}>
ts-游乐场 https://www.typescriptlang.org/play?ts=3.9.2#code/C4TwDgpgBAwg9gO2AQwJYIgJwDwBUB8UAvFAN5QBuyANgK4QBcUuUAvgFDuiSyIrpYAznkIkWEAB7AICACaCo6AGZYoAQSgB+XkjQYcawkwwUsAbk7doMYjv77hg4JnQBzKAB8oCWgFsARqpepBLGfoGYrJ5kAF5MTi4IrlFe-nBw1BDICPiW4NYAjLbwugKYjs5u0T4BWPhAA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)