在没有通用实例的情况下检查通用类型

时间:2019-10-04 21:06:19

标签: typescript

我想检查泛型的类型而没有实例。

类似的东西:

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

有可能吗?

1 个答案:

答案 0 :(得分:0)

如@jcalz所述,这是不可能的,因为将TS编译为JS时会删除类型系统。

可能的解决方案是:

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

就我而言,我刚刚创建了两个具有相似逻辑的专用功能。它的DRY更少,但更易于阅读和测试。