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

我希望参数类型
Array

Array
表示可以容纳
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));
}