我正在尝试检查给定的字符串值在类型转换中的某些字符串联合类型中是否是一个有效值。就像这样:
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操作符不像我所希望的那样工作。在互联网上搜索,我找到了各种各样的“解决方案”,它们基本上创建了一个包含所有有效值的数组,使用这个数组来定义联合类型,并检查数组是否包含所需的值。但这不是我的情况的有效解决方案,因为我没有定义联合类型,它是在外部库中定义的。有谁知道还有其他方法来执行这个检查吗?
发布于 2021-05-13 12:31:52
请记住,在类型记录中,所有类型信息都在运行时被删除。as操作符不会在运行时执行任何操作,也不会抛出类型错误。
因此,在运行时检查某个值是否在联合中的唯一方法是创建一个数组,正如您所说的。由于您没有自己定义联合类型,所以我看不到自动创建数组的方法--您必须根据联合值手动创建它。
另一种选择是只在编译时进行检查,但是我想您有特殊的理由只想在运行时进行检查。
https://stackoverflow.com/questions/67519216
复制相似问题