我已经为我支持的方法生成了一个Union类型,我想检查该方法是否是我支持的方法之一,然后动态调用该方法。我知道我可以通过使用支持的方法名称数组和使用方法如include来检查这一点,但我想知道是否有可能进行类型检查?
import * as mathFn from './formula/math';
type SupportedMathFunction = keyof typeof mathFn;
//'fnA'| 'fnB' | ...
,例如,我想使用这样的语法:
if( methodName is SupportedMathFunction){
//do something
}
我会检查给定的方法名称是否为mathFn的键。不幸的是,这种检查不足以让编译器注意到字符串是SupportedMathFunction类型,您需要使用用户定义类型保护
function isMemberOfMathFn(methodName: string): methodName is keyof typeof mathFn {
return methodName in mathFn;
}
function test(methodName: string) {
if (isMemberOfMathFn(methodName)) {
const method = mathFn[methodName];
}
}