微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决打字稿动态检查值是否为联合类型

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

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

例如我想使用如下语法:

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

解决方法

我会检查给定的方法名称是否是 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];
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。