打字稿:“解析”条件类型

时间:2018-04-07 10:28:59

标签: typescript types

我有以下代码。

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而不是联盟的情况。

1 个答案:

答案 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;
    })
};