在联合上分配泛型类型

2024-04-09

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(使用前将#替换为@)

在联合上分配泛型类型 的相关文章

随机推荐