代码之家  ›  专栏  ›  技术社区  ›  bingles

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

  •  2
  • bingles  · 技术社区  · 6 年前

    我有一个使用泛型类型的条件类型 T 确定一个 Array<T> 类型。作为一个人为的例子:

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

    我现在遇到的问题是,当我提供一个联合类型时,它将被分发为2个数组类型的联合,而不是我的联合类型的数组。

    // compiler complains because it expects Array<'one'> | Array<'two'>
    const y: X<'one' | 'two'> = ['one', 'two'];
    

    如果条件满足,是否有一种方法可以键入此类型,以便我的条件类型生成一个数组<'one''two'>?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Titian Cernicova-Dragomir    6 年前

    您已经遇到了条件类型的分布行为,其中条件类型分布在包含联合的裸类型参数上。这种行为在某些情况下非常有用,但一开始可能有点令人惊讶。

    禁用此行为的simples选项是将类型参数放入元组中:

    type X<T> = [T] extends [string] ? Array<T> : never;
    
    // ok y is Array<'one' | 'two'>
    const y: X<'one' | 'two'> = ['one', 'two'];
    

    你可以了解更多关于这种行为的信息 here here