【发布时间】:2021-10-19 02:06:48
【问题描述】:
使用 Flow,有时我想表示某种类型的对象,但其中任何字段都可能是 undefined 或 null。
例如,在验证 T 类型的对象时,在验证之前我知道我有一些看起来像 T 但可能缺少一些字段的东西。验证成功后,我知道我有一个T,并且每次使用它们时都不需要对所有字段进行空检查。
type T = { a: number, b: number }
type MaybeT = { a: ?number, b: ?number }
const validate = (candidate: MaybeT): T => {
if (!candidate.a || !candidate.b) {
throw 'Invalid'
}
return { a: candidate.a, b: candidate.b }
}
const maybeT: MaybeT = getInputFromUser()
const t: T = validate(maybeT)
doStuffKnowingAllFieldsOfTAreDefined(t)
显然,MaybeT 的重新定义很冗长,如果我修改 T,我现在还必须记住修改 MaybeT。
我的问题:
在 Flow 中是否有某种简写形式,例如
$WithAllFieldsMaybe<T>,所以我可以直接从T派生MaybeT而无需手动操作?如果没有,是否有更好的模式,无需使用两种单独的类型?据我所知,没有办法让 Flow“知道”
validate之后的所有字段都存在,因为例如,我可以在validate运行后将字段设置回 null - 所以我不知道在这里看不到使用单一类型的方法。
【问题讨论】:
标签: flowtype