bin*_*les 3 discriminated-union typescript
我有一个条件类型,它使用泛型类型T来确定Array<T>类型。作为一个人为的例子:
type X<T> = T extends string ? Array<T> : never;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是当我提供联合类型时,它以2个数组类型的联合而不是我的联合类型的数组形式分发。
// compiler complains because it expects Array<'one'> | Array<'two'>
const y: X<'one' | 'two'> = ['one', 'two'];
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以键入,以便我的条件类型产生Array <'one'| 'two'>是否满足条件?
您遇到了条件类型的分布行为,其中条件类型分布在包含联合的裸类型参数上。此行为在某些情况下非常有用,但起初可能会有些意外。
禁用此行为的简单选项是将type参数放在元组中:
type X<T> = [T] extends [string] ? Array<T> : never;
// ok y is Array<'one' | 'two'>
const y: X<'one' | 'two'> = ['one', 'two'];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |