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