我正在使用flow并且有一个接受对象的函数,并返回一个数组,该数组根据该对象的属性将该对象拆分为两个对象。
此函数的定义如下所示:
function split({ foo, bar, ...params }) {
return [
{ foo, bar },
params
]
}
并将像这样使用:
split({ foo: 123, bar: 456, baz: 'abc' }) // [{ foo: 123, bar: 456 }, { baz: 'abc' }]
我不确定如何为foo
和bar
是常量的已知属性添加此函数的流定义,params
是通用的类型可以是任何东西。
我目前的尝试如下:
type FooBar = { foo: number, bar: number }
function split<T>({ foo, bar, ...params }: FooBar & T): [FooBar, T] {
return [
{ foo, bar },
params
]
}
但是,flow将返回数组的第二个元素解释为仍具有最初传入的所有属性。我怎么告诉flow第二个元素只有AREN&#39; T foo和bar的属性?
答案 0 :(得分:1)
这应该适合你:
type FooBar = { foo: number, bar: number };
function split<T: FooBar>({ foo, bar, ...params }: T): [FooBar, $Diff<T, FooBar>] {
return [
{ foo, bar },
params
];
}