Javascript 联合泛型类型(如Array<;A | B>;?
我希望参数类型Javascript 联合泛型类型(如Array<;A | B>;?,javascript,flowtype,Javascript,Flowtype,我希望参数类型ArrayArray表示可以容纳as或Bs的数组 Array不是Array,因为它不能容纳Bs(如果将B放入其中会发生什么情况?) 这称为不变性。Array表示可以容纳As或Bs的数组 Array不是Array,因为它不能容纳Bs(如果将B放入其中会发生什么情况?) 这被称为不变性。因此As的数组不满足array?@WillM:它取决于数组本身的编译时类型;不是它的内容。那么,如何解决返回是数组或数组但不知道的问题呢?谢谢!!顺便说一下,如果我不知道返回的完整对象,可以这样做吗:A
ArrayArray
表示可以容纳a
s或B
s的数组
Array
不是Array
,因为它不能容纳B
s(如果将B
放入其中会发生什么情况?)
这称为不变性。Array
表示可以容纳A
s或B
s的数组
Array
不是Array
,因为它不能容纳B
s(如果将B
放入其中会发生什么情况?)
这被称为不变性。因此A
s的数组不满足array
?@WillM:它取决于数组本身的编译时类型;不是它的内容。那么,如何解决返回是数组或数组但不知道的问题呢?谢谢!!顺便说一下,如果我不知道返回的完整对象,可以这样做吗:Array因此A
s数组不满足Array
?@WillM:这取决于数组本身的编译时类型;不是它的内容。那么,如何解决返回是数组或数组但不知道的问题呢?谢谢!!顺便问一下,如果我不知道要返回的完整对象,可以这样做吗:数组
export type A = {
id: string;
name: string;
legacyId?: number;
};
export type B = {
id: number;
title: string;
};
export type AOrB = A | B;
function toB(items: Array<B>): Array<B> {
return items
.reduce((acc, item) => {
if (typeof item.id === 'number') {
const b = ((item:any):B);
return [...acc, b];
} else if (typeof item.id === 'string') {
const a = ((item:any):A);
return a.legacyId ? [...acc, {
id: a.legacyId,
title: a.name,
}] : acc;
}
return acc;
}, []);
}
function onUpdateItem(items: Array<B>) {
//...
}
function updateItem(items: Array<A>) {
onUpdateItem(toB(items));
}