首页 > 解决方案 > 对函数的泛型返回类型进行比较

问题描述

我正在尝试获取有关传递给函数或类的泛型类型的信息,以便我可以在其他地方对其执行一些逻辑。我想要取决于函数的返回类型的特定行为,但我不知道如何检查这一点。

假设我有这个简单的对象:

interface MyObj<T> {
  fn: (obj: T) => T;
}
const obj: MyObj<number> = { fn: (obj: number): number => 4 };

我可以通过执行以下操作获得返回类型:

类型 myType = ReturnType;

然后我希望能够做到:

if (myType === "number") { // 'myType' only refers to a type, but is being used as a value here. ts(2693)
  doSomething();
}

我怎样才能做到这一点?

标签: typescript

解决方案


你不能做这个。

YourmyType是类型检查器在编译时使用的类型注释。然后它被“编译掉”并且在运行时不存在。因此,您无法对其进行运行时检查。

您可以针对具体值执行运行时类型断言。

const value = obj.fn(0); 

if (typeof value === 'number') {
  doSometing(); 
}

推荐阅读