TypeScript:联合类型分布的条件类型数组
TypeScript: Conditional type array of union type distribution
我有一个条件类型,它使用泛型类型 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'];
有没有一种方法可以让我的条件类型产生一个 Array<'one' | 'two'>是否满足条件?
您已 运行 了解条件类型的分布行为,其中条件类型分布在包含联合的裸类型参数上。这种行为在某些情况下非常有用,但一开始可能会有点令人惊讶。
禁用此行为的简单选项是将类型参数放在元组中:
type X<T> = [T] extends [string] ? Array<T> : never;
// ok y is Array<'one' | 'two'>
const y: X<'one' | 'two'> = ['one', 'two'];
您可以阅读有关此行为的更多信息here and
我有一个条件类型,它使用泛型类型 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'];
有没有一种方法可以让我的条件类型产生一个 Array<'one' | 'two'>是否满足条件?
您已 运行 了解条件类型的分布行为,其中条件类型分布在包含联合的裸类型参数上。这种行为在某些情况下非常有用,但一开始可能会有点令人惊讶。
禁用此行为的简单选项是将类型参数放在元组中:
type X<T> = [T] extends [string] ? Array<T> : never;
// ok y is Array<'one' | 'two'>
const y: X<'one' | 'two'> = ['one', 'two'];
您可以阅读有关此行为的更多信息here and