我有一个带有一些空键的对象,例如:
type obj = Array<{key: ?number}>;
,我想通过将空值过滤为以下内容来对此进行优化:
Array<{key: number}>
但是我不知道如何让流程变得快乐。简单复制(try flow):
type myType = {
key: number,
}
const objs = [{key: null}, {key: 42}];
const filtered: Array<myType> = objs.filter(obj => obj.key != null);
答案 0 :(得分:0)
Flow并没有(当前)说明您可以使用Array.prototype.filter
按类型进行过滤的事实,因此仅假设类型没有变化。如果您真的想让Flow了解这里发生的事情,则可以始终使用简化:
(Try)
type myType = {
key: number,
}
const objs = [{key: null}, {key: 42}]
// no error
const filtered: Array<myType> = objs.reduce(
(acc, {key}) => key != null ? [...acc, {key}] : acc,
[])
Flow可以了解key
在这种情况下不能为null。如果您要保留myType
的其他属性,则可以使用此reducer对其进行继承:(acc, {key, ...rest}) => key != null ? [..acc, {...rest, key}] : acc
。
或者,如果您确定自己在做什么(并且已经进行了单元测试或适当的测试),则可能希望通过any
进行类型转换以获得相同的效果:
(Try)
type myType = {
key: number,
}
const objs = [{key: null}, {key: 42}];
// no error
const filtered: Array<myType> = (objs.filter(obj => obj.key != null): any)
我个人认为类型转换更具可读性,并且很容易断言这种逻辑在一个或两个单元测试中是正确的。