Javascript 如何在typescript中使用`Set.has`?
我想检查给定字符串是否在键入的Javascript 如何在typescript中使用`Set.has`?,javascript,typescript,Javascript,Typescript,我想检查给定字符串是否在键入的集中,如: enum Fruit { AP = 'apple', OR = 'orange', BN = 'banana', }; let validFruits = new Set(Object.values(Fruit)); function isValidFruit(v: string): boolean { return validFruits.has(v); ^ // Argument
集中,如:
enum Fruit {
AP = 'apple',
OR = 'orange',
BN = 'banana',
};
let validFruits = new Set(Object.values(Fruit));
function isValidFruit(v: string): boolean {
return validFruits.has(v);
^ // Argument of type 'string' is not assignable
// to parameter of type 'Fruit'.
}
我不想使用find
,因为它会迭代所有的值。如何做到这一点并将成员资格测试保持在O(1)
?解决此问题的一种方法:
const validFruits = new Set<string>(Object.values(Fruit));
function isValidFruit(v: string): boolean {
return validFruits.has(v as any);
}
只需新集合(枚举值)
?这是否有效有效果实(v为果实)
我需要保留集合
@SamR。还有一个给你。:)谢谢。技术上是正确的,所以我接受你的回答,因为它回答了我的问题,但我想我需要重新表述我的问题,因为我正在寻找一种方法,将字符串
值强制为其对应的枚举
。无论如何,谢谢。@SamR,从技术上讲,您要寻找的是一个类型保护或断言函数。在这些类型的函数中使用强制转换是很正常的,所以我觉得这是一种非常惯用的处理方法。我建议您研究一下enum
(现在有更好的工具)的缺点,以及类型保护通常是如何编写的。你会发现我的第二个例子很常见。