我想检查泛型的类型,但没有它的实例。
像这样:
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 为联合类型
就我而言,我刚刚创建了两个具有相似逻辑的专用函数。它不那么干燥,但更易于阅读和测试。