Reactjs 有没有办法使用flow来限制特定的字符串模式?

Reactjs 有没有办法使用flow来限制特定的字符串模式?,reactjs,flowtype,Reactjs,Flowtype,我在React webapp上使用Flow,目前我面临一个用例,要求用户以“HH:mm”格式输入某些时间值。有没有办法描述字符串所遵循的模式 我一直在寻找一个解决方案,但我在某一点上同意的普遍共识似乎是,您不需要使用流来处理这类事情,更喜欢使用验证函数并依赖UI代码按照正确的模式提供代码。不过,我想知道是否有任何方法可以实现这一点,以便使代码尽可能具有描述性。您希望创建一个验证程序函数,但使用不透明类型别名进行增强: 或者,更具体地说,具有子类型约束的不透明类型别名: 您应该在定义不透明类型的同

我在React webapp上使用Flow,目前我面临一个用例,要求用户以“HH:mm”格式输入某些时间值。有没有办法描述字符串所遵循的模式


我一直在寻找一个解决方案,但我在某一点上同意的普遍共识似乎是,您不需要使用流来处理这类事情,更喜欢使用验证函数并依赖UI代码按照正确的模式提供代码。不过,我想知道是否有任何方法可以实现这一点,以便使代码尽可能具有描述性。

您希望创建一个验证程序函数,但使用不透明类型别名进行增强:

或者,更具体地说,具有子类型约束的不透明类型别名:

您应该在定义不透明类型的同一文件中编写验证器函数。它将接受基元类型作为参数,并返回一个类型为不透明类型且带有子类型约束的值

现在,在另一个文件中,您可以键入一些变量作为不透明类型,例如在函数参数中。流将强制您只传递通过验证器函数的值,但这些值可以像原语类型一样使用

例如:

exports.js

export opaque type ID: string = string;


function validateID(x: string): ID | void {
    if ( /* some validity check passes */ ) {
        return x;
    }

    return undefined;
}
import type {ID} from './exports';

function formatID(x: ID): string {
    return "ID: " + x; // Ok! IDs are strings.
}

function toID(x: string): ID {
    return x; // Error: strings are not IDs.
}
import.js

export opaque type ID: string = string;


function validateID(x: string): ID | void {
    if ( /* some validity check passes */ ) {
        return x;
    }

    return undefined;
}
import type {ID} from './exports';

function formatID(x: ID): string {
    return "ID: " + x; // Ok! IDs are strings.
}

function toID(x: string): ID {
    return x; // Error: strings are not IDs.
}

如果您想创建一个包含所有可能字符串的联合类型,那么可以这样做,但在流中键入泛型模式并不是一个好方法。例如,您可以执行
typevalidInput='00:00'|'00:01'|'00:02'|……|'24:59'
但您不能执行
类型ValidInput=
。在这种情况下,所有可能的字符串可能性的联合类型绝对不可行。。。