如何检查javascript流类型中是否存在值

如何检查javascript流类型中是否存在值,javascript,ecmascript-6,types,flowtype,Javascript,Ecmascript 6,Types,Flowtype,我有一个类型定义为 export type fruit = 'apple' | 'orange' | 'pear'; 我要做的是验证一个字符串,看看它是否匹配此类型中定义的任何值 有什么方法可以做到这一点吗?最好的方法是使用数组,然后像这样使用数组#includes进行验证 constfruits=[“苹果”、“橘子”、“梨”]; const isValid=anyFruit=>fruits.includes(anyFruit); console.log(isValid(“苹果”)); co

我有一个类型定义为

export type fruit = 'apple' | 'orange' | 'pear';
我要做的是验证一个字符串,看看它是否匹配此类型中定义的任何值


有什么方法可以做到这一点吗?

最好的方法是使用
数组
,然后像这样使用
数组#includes
进行验证

constfruits=[“苹果”、“橘子”、“梨”];
const isValid=anyFruit=>fruits.includes(anyFruit);
console.log(isValid(“苹果”));
console.log(isValid(“橙色”));
log(isValid(“pear”));

console.log(isValid(“香蕉”))如果您谈论的是从字符串到这些值之一的类型细化,那么目前还没有一种优雅的方法来实现这一点

几天前,这里发布了一个非常类似的问题,并提出了一个问题

要对flow执行此操作而不获取错误,您需要使用if语句或switch语句手动键入组合


这绝对有点笨重,你也可以这样做:

type FruitMap = {
  apple: '',
  pear: '',
}

const FRUIT_MAP: FruitMap = Object.freeze({
  apple: '',
  pear: '',
});

type Fruit = $Keys<FruitMap>;

const apple = 'apple';
const isFruit = Object.keys(FRUIT_MAP).includes(apple);
类型水果图={
苹果:'',
梨:'',
}
const FRUIT\u MAP:FruitMap=Object.freeze({
苹果:'',
梨:'',
});
输入Fruit=$Keys;
const apple=‘apple’;
const isFruit=Object.keys(水果映射)。包括(苹果);

这是否回答了您的问题?如果你需要帮助,请告诉我@丹佩蒂斯
type FruitMap = {
  apple: '',
  pear: '',
}

const FRUIT_MAP: FruitMap = Object.freeze({
  apple: '',
  pear: '',
});

type Fruit = $Keys<FruitMap>;

const apple = 'apple';
const isFruit = Object.keys(FRUIT_MAP).includes(apple);