打字稿中的参数化联合

时间:2017-12-01 20:50:03

标签: typescript types

是否存在参数化指定联合的通用方法?我正在寻找一种通用的方法,如:

type U<K> = T<K1> | T<K2> | ... | T<Kn> // Where K === (K1 | ... | Kn)

注意:我正在处理T<U | V> !== T<U> | T<V>的情况。 (与#14107#16644

相反的排序

编辑:当K是字符串文字的并集时,我发现了以下模式:

type U<K> = {[key in K]: T<key>}[K]

但如果我尝试将其用作函数参数,则不能很好地使用类型推断。

1 个答案:

答案 0 :(得分:0)

TypeScript 2.8提供了另一种使用conditional types完成此分发的方法。发布公告中的一个例子:

type Foo<T> = T extends any ? T[] : never;

/**
 * Foo distributes on 'string | number' to the type
 *
 *    (string extends any ? string[] : never) |
 *    (number extends any ? number[] : never)
 * 
 * which boils down to
 *
 *    string[] | number[]
 */
type Bar = Foo<string | number>;