首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类型记录中检查字符串联合上的字符串值

在类型记录中检查字符串联合上的字符串值
EN

Stack Overflow用户
提问于 2021-05-13 12:26:10
回答 1查看 66关注 0票数 0

我正在尝试检查给定的字符串值在类型转换中的某些字符串联合类型中是否是一个有效值。就像这样:

代码语言:javascript
复制
export default class TypeGuard<U extends string> {
  isSafe<T extends string>(candidate?: T): ((T & U) | undefined) {
    if (!candidate) return undefined;
    let result: T & U;
    try {
      result = candidate as T & U;
    } catch (error) { // expect TypeError
      return undefined;
    }
    if (!result) return undefined;
    return result;
  }
}

但是as操作符不像我所希望的那样工作。在互联网上搜索,我找到了各种各样的“解决方案”,它们基本上创建了一个包含所有有效值的数组,使用这个数组来定义联合类型,并检查数组是否包含所需的值。但这不是我的情况的有效解决方案,因为我没有定义联合类型,它是在外部库中定义的。有谁知道还有其他方法来执行这个检查吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-13 12:31:52

请记住,在类型记录中,所有类型信息都在运行时被删除。as操作符不会在运行时执行任何操作,也不会抛出类型错误。

因此,在运行时检查某个值是否在联合中的唯一方法是创建一个数组,正如您所说的。由于您没有自己定义联合类型,所以我看不到自动创建数组的方法--您必须根据联合值手动创建它。

另一种选择是只在编译时进行检查,但是我想您有特殊的理由只想在运行时进行检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67519216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档