Typescript - 在具有条件返回类型的函数中返回特定类型

用户3741580

为什么这段代码不起作用?具体来说,为什么联合类型不能分配给条件类型?

编辑:虽然很清楚为什么联合类型不能分配给条件类型,但这里有一个类型保护,理论上应该保证正确的返回类型。

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;
}

示例 1

示例 2

示例 3

这可以使用函数重载来解决,但在我的情况下这并不方便:签名f又大又复杂,我不想在每个重载中重复它。

lei li
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 扩展接口而不是类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正确使用带有条件接口返回类型的 TypeScript 重载

具有函数返回类型的TypeScript接口

从TypeScript中的函数返回对象(具有特定键,值类型)

具有返回类型的Typescript查找类型

泛型函数的TypeScript条件返回类型

Typescript函数,该函数从具有正确类型的数组中返回一项

强制在Typescript中的类中返回所有函数的类型

TypeScript:如何在带有rest参数的函数中返回条件类型?

Typescript返回一个函数,该函数返回具有类型约束的组件

Typescript 函数返回类型中继

返回特定类型的TypeScript键

TypeScript 中的类型转换和条件返回类型

TypeScript推断类型构造函数中的回调返回类型

TypeScript - 基于参数类型的函数返回类型

TypeScript:从函数中返回_.orderBy,要使用什么返回类型?

当对象具有多个返回类型时,如何检查TypeScript中的对象类型?

如何在具有返回类型的TypeScript方法中从Observable返回

在TypeScript中返回类类型

在Typescript中使用条件返回类型实现函数

TypeScript:如何使用条件返回类型编写函数

Typescript:具有泛型类型的函数在返回时是否在泛型对象中强制执行?

Typescript-如何根据其他属性有条件地定义类型

T是有条件的时,TypeScript无法推断通用类型

返回类型与TypeScript中的输入类型相同

TypeScript:覆盖具有重载的方法返回类型

TypeScript具有相同参数的多种返回类型

Typescript从传递的函数返回类型推断返回类型

TypeScript返回参数的类型

通用 Typescript 函数是否可以有多个返回类型?