检查变量是否属于 Typescript 中的自定义类型

Mar*_*nte 7 types instanceof typescript

我正在尝试检查变量是否属于某种类型。

代码:

type GeneralType = SubTypeA | SubTypeB;
type SubTypeA = 'type1' | 'type2';
type SubTypeB = 'type3' | 'type4';

function someFunction(arg1: GeneralType) {
  if (arg1 instanceof SubTypeA) {
    // Do something
  }
  // Continue function
  return arg1;
}
Run Code Online (Sandbox Code Playgroud)

当然,这段代码在第 6 行失败了,因为instanceof它不能用于类型。有没有我可以使用的替代选项,而无需明确检查 的每个可能值SubTypeA

Mar*_*nte 6

正如评论中提到的,似乎没有简单的方法可以实现这一点。

最后,我发现最优雅的方法是使用类型保护,如下所示:

type GeneralType = SubTypeA | SubTypeB;
type SubTypeA = 'type1' | 'type2';
type SubTypeB = 'type3' | 'type4';

function someFunction(arg1: GeneralType) {
  if (isSubTypeA(arg1)) {
    // Do something
  }
  // Continue function
}

function isSubTypeA(arg: GeneralType): arg is SubTypeA {
  return ['type1', 'type2'].some(element => element === arg);
}
Run Code Online (Sandbox Code Playgroud)

更详细的解释可以在这里找到。

  • 我希望有一种更优雅、更简洁的方法来做到这一点,例如在不使用辅助函数的情况下在 if 语句中断言类型。 (7认同)