TypeScript:联合类型分布的条件类型数组

时间:2019-01-01 15:47:38

标签: typescript discriminated-union

我有一个条件类型,它使用通用类型line = reader.readLine(); 来确定T类型。作为一个人为的例子:

Array<T>

我遇到的问题是当我提供联合类型时,它以2个数组类型的联合而不是我的联合类型的数组形式分发。

type X<T> = T extends string ? Array<T> : never;

有没有一种方法可以键入此条件,以便我的条件类型产生Array <'one'| 'two'>是否满足条件?

1 个答案:

答案 0 :(得分:3)

您遇到了条件类型的分布行为,其中条件类型分布在包含联合的裸类型参数上。这种行为在某些情况下非常有用,但起初可能会有些意外。

禁用此行为的简单方法是将type参数放入元组:

type X<T> = [T] extends [string] ? Array<T> : never;

// ok y is Array<'one' | 'two'>
const y: X<'one' | 'two'> = ['one', 'two'];

您可以了解有关此行为herehere

的更多信息