检查没有泛型实例的泛型类型



我想检查泛型的类型,但没有它的实例。

像这样:

doThing<T extends Foo | Bar>(someArg: string): T {
if (T extends Foo) return functionThatReturnsFoo(someArg);
else return functionThatReturnsBar(someArg);
} 

这可能吗?

正如@jcalz所提到的,这是不可能的,因为当 TS 编译为 JS 时,类型系统被删除了。

可能的解决方案是:

  • 使用专用返回类型创建两个完全独立的函数
  • 将标志传递到当前函数中以指示所需的调用,然后使返回为联合类型
  • 将所需的函数作为 arg 传递到doThing,然后让 return 为联合类型

就我而言,我刚刚创建了两个具有相似逻辑的专用函数。它不那么干燥,但更易于阅读和测试。

最新更新