Javascript 流量-如何检查数字范围?

Javascript 流量-如何检查数字范围?,javascript,flowtype,Javascript,Flowtype,我看到流量可以,但我不知道如何检查可能的数字范围 当我使用“道具类型”模块时,我可以做一些动作,但在流程中,我不知道如何做这样的事情 有人能帮我吗?如果有人发现这个问题,我将添加一个答案,允许您检查一系列数字,但需要您创建额外的类型来表示该信息 其好处是,通过一些前期成本,您可以同时获得运行时和编译时验证 这是一个演示 假设我想确保传入的数字在0到5之间 // Create a type that we can use for validation type WithinRange = {};

我看到流量可以,但我不知道如何检查可能的数字范围

当我使用“道具类型”模块时,我可以做一些动作,但在流程中,我不知道如何做这样的事情


有人能帮我吗?

如果有人发现这个问题,我将添加一个答案,允许您检查一系列数字,但需要您创建额外的类型来表示该信息

其好处是,通过一些前期成本,您可以同时获得运行时和编译时验证

这是一个演示

假设我想确保传入的数字在0到5之间

// Create a type that we can use for validation
type WithinRange = {};

// Create our extended number type
type RangedNumber = number & WithinRange;

// Validation function that works 
function makeRangeCheckedNumber(x: number): ?RangedNumber {
  if (x > 0 && x < 5) {
    // type cast to any so we can type cast back to RangedNumber
    return ((x: any): RangedNumber);
  } else {
    return null;
  }
}

// function that were to take the range checked number
function someComputation(num: RangedNumber): void {
}

const myInputNumber = 5;


// So we have to wrap it in the validation function we wrote up
const maybeWithinRangeInput = makeRangeCheckedNumber(myInputNumber);

// And this would force users of someComputation to handle both cases
if (maybeWithinRangeInput == null) {
  throw new Error();
} else {
  someComputation(maybeWithinRangeInput);
}
任何想要使用组件的人都必须确保在调用组件时使用验证功能

// Would error until they wrap this in makeRangeCheckedNumber
<MyComponent input={6} />

// This is fine
<MyComponent input={makeRangeCheckedNumber(6)} />
//将出错,直到他们将其包装到makeRangeCheckedNumber中
//这很好

这确实会迫使使用者调用验证函数,而不是让它自动发生,但Flow会告诉他们这样做,您可以保证您的代码是正确的。

这是不可能的。请看我对类似问题的回答:@NatMote我读了你的答案。这是非常有用的。谢谢。谢谢你提供的所有信息。你给了我正确的方向。
// Would error until they wrap this in makeRangeCheckedNumber
<MyComponent input={6} />

// This is fine
<MyComponent input={makeRangeCheckedNumber(6)} />