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
(现在有更好的工具)的缺点,以及类型保护通常是如何编写的。你会发现我的第二个例子很常见。