打字稿动态检查值是否为联合类型

时间:2021-02-16 06:37:23

标签: typescript typechecking union-types

我已经生成了我支持的方法的联合类型,我想检查该方法是否是我支持的方法之一,然后动态调用该方法。 我知道我可以通过使用一组受支持的方法名称和使用方法来检查这一点,但我想知道是否可以进行类型检查?

import * as mathFn from './formula/math';
type SupportedMathFunction = keyof typeof mathFn;
//'fnA'| 'fnB' | ...

例如我想使用如下语法:

if( methodName is SupportedMathFunction){
//do something
}

1 个答案:

答案 0 :(得分:2)

我会检查给定的方法名称是否是 mathFn 的键。不幸的是,该检查不足以让编译器注意到该字符串的类型为 SupportedMathFunction ,您需要使用 User-Defined Type Guards

function isMemberOfMathFn(methodName: string): methodName is keyof typeof mathFn {
  return methodName in mathFn;
}


function test(methodName: string) {
  if (isMemberOfMathFn(methodName)) {
    const method = mathFn[methodName];
  }
}