我有以下代码。
type Bar<A> = { f: A };
type Result<A> = { r: A };
function foo<A>(
f: (o: A, b: A extends object ? Bar<A> : undefined) => Result<A>
) {
return undefined as any;
}
const func = <A extends object>(b: Bar<A>) => {
return foo<A>((o: A, typeError: Bar<A>) => {
return undefined as any;
})
};
我在名为typeError
的参数的匿名函数中得到(2)类型错误。它type undefined/object is not assignable to type Bar<A>
。
我觉得很奇怪,因为A
明确地扩展了object
,所以我们应该是undefined
而不是联盟的情况。
答案 0 :(得分:2)
我认为编译器不允许您在包含泛型的条件类型上指定已解析的类型,即使它可以评估条件。
最简单的解决方法是指定相同的条件类型或让类型推断为您工作:
const func = <A extends Object>(b: Bar<A>) => {
return foo<A>((o: A, typeError: A extends Object ? Bar<A> : undefined) => {
typeError.f; // is ok
return undefined as any;
})
};
//Or
const func = <A extends Object>(b: Bar<A>) => {
return foo<A>((o: A, typeError) => {
typeError.f; // also ok
return undefined as any;
})
};