为什么此代码不起作用?具体来说,为什么联合类型不能分配给条件类型?
编辑:尽管很清楚为什么不能将联合类型分配给条件类型,但是在理论上应该有一个类型保障,即应该保证正确的返回类型。
class A { }
class B { }
function f<T extends A | B>(x: T): T extends A ? A : B {
if (x instanceof A) {
return x;
}
return x;
}
这可以使用函数重载来解决,但在我的情况下不方便:f
的签名又大又复杂,我不想在每个重载中都重复它。
答案 0 :(得分:0)
class A { t: "A" }
class EA extends A { et: "EA" }
class B { t: "B" }
class C { t: "C" }
function f<T extends A | B>(x: T extends A ? A : B): T extends A ? A : B {
if (x instanceof A) {
return x;
}
return x;
}
f<A>(new A())//return A
f<EA>(new EA())//return A
f<B>(new B())//return B
f<C>(new C())//TYPE ERROR
泛型T扩展了接口,而不是类。