我正在React Web应用程序上使用Flow,目前正面临一个用例,要求用户以“ HH:mm”格式输入某些时间值。有什么方法可以描述字符串遵循的是什么模式?
我一直在寻找解决方案,但是我在某种程度上同意的一般共识似乎是您不需要使用Flow处理此类事情,而赞成使用验证函数并依赖于UI代码以遵循正确的模式提供代码。仍然,我想知道是否有什么方法可以使代码尽可能具有描述性。
答案 0 :(得分:1)
您要创建验证器功能,但使用了不透明类型别名进行了增强:https://flow.org/en/docs/types/opaque-types/
或更具体地说,具有子类型约束的不透明类型别名:https://flow.org/en/docs/types/opaque-types/#toc-subtyping-constraints
您应该在定义不透明类型的同一文件中编写验证器函数。它将接受原始类型作为参数,并返回带有子类型约束的不透明类型的值。
现在,在另一个文件中,您可以键入一些变量作为不透明类型,例如在函数参数中。 Flow会强制您仅传递通过验证程序函数的值,但这些值可以像原始类型一样使用。
示例:
exports.js
:
export opaque type ID: string = string;
function validateID(x: string): ID | void {
if ( /* some validity check passes */ ) {
return x;
}
return undefined;
}
import.js
:
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.
}