ecmascript-6 - Flow:在 map/filter/reduce 期间保留类型
问题描述
如何在正确推断键类型的同时过滤/减少类型对象?例如:
/* @flow */
type A = {
a0?: string,
a1?: boolean,
a2?: number
}
type B = {
b0?: string,
b1?: boolean,
b2?: number
}
type AB = A & B
const keysA = ['a0', 'a1', 'a2']
// Given an AB object, keep only the keys that belong in type A
function keepA(ab: AB):A {
return keysA
.filter(prop => ab.hasOwnProperty(prop))
.reduce((obj, prop) => {
obj[prop] = ab[prop]
return obj
}, {} )
}
function flowTest(ab: AB) {
const a = keepA(ab)
return a
}
这会引发错误:
obj[prop] = ab[prop]
^ Cannot return `keysA.filter(...).reduce(...)`
because boolean [1] is incompatible with
string [2] in property `a0`.
References:
4: a1?: boolean,
^ [1]
3: a0?: string,
^ [2]
似乎在 assignmentobj[prop] = ab[prop]
中,flow 认为右侧可能是string | boolean | number
.
它在 flow.org/try 上:
我对 Flow 很陌生(以及一般的类型检查)。
解决方案
推荐阅读
- ssl - Camel FTPs 如何启用 TLS 恢复
- android - 如何使用 FusedLocationProviderClient 通过 Google API 获取当前位置
- testrail - TestRail:如何从在某些测试计划执行期间失败的测试中创建单独的测试计划?
- c# - 如何更改在实体框架中创建新数据库的默认位置?
- php - geoip_record_by_name ipv6 不麦芽汁
- angular - 几秒钟后显示和隐藏多个 div angular 2 / typescript
- amazon-ec2 - 从 ec2 标签注册 consul node_meta
- bash - WGET 保存错误的文件和扩展名可能是由于 BASH
- python - 如何使用 urlopen 进行动态查询字符串
- powershell - 在powershell中提取文件的所有数字签名