typescript distribute over union在索引签名中不起作用



通常情况下,我们可以期望在这样的示例中出现分配行为

type a<T>=T extends undefined ? "here":"there"
type b = a<boolean|undefined> // "here"|"there"

但是这在索引签名

中不起作用
type test<
L extends { [index: string]: unknown },
> = 
{
[K in keyof L]: L[K] extends undefined ?"here":"there"
}

type e = test<{a:boolean|undefined}> //{a:"there"}, was expecting {a:"here"|"there"} 

如何解决这个问题?

update我找到答案了

type a<T>=T extends undefined ? "here":"there"
type b = a<boolean|undefined> // "here"|"there"
type test<
L extends { [index: string]: unknown },
> = 
{
[K in keyof L]: a<L[K]>
}

type e = test<{a:boolean|undefined}> //{a:"here"|"there"}

最新更新