Typescript通用数组类型和推送项

Typescript通用数组类型和推送项,typescript,typescript-typings,Typescript,Typescript Typings,我正在尝试创建一个通用函数,它处理各种类型的数组(只共享少数公共属性),并执行简单的操作,例如删除或添加项。打字的人应该如何寻找这样一个函数 接口A{ 值:数字; aasdsad?:编号; abc:字符串; } 接口B{ 值:数字; asdsad1?:字符串; } 出口类主要{ 公共getOneOfArrays():A[]| B[]{ return[];//根据特定条件返回A[]或B[] } 公共getValue(索引:编号){ const-arr:A[]| B[]=this.getOneOfA

我正在尝试创建一个通用函数,它处理各种类型的数组(只共享少数公共属性),并执行简单的操作,例如删除或添加项。打字的人应该如何寻找这样一个函数

接口A{
值:数字;
aasdsad?:编号;
abc:字符串;
}
接口B{
值:数字;
asdsad1?:字符串;
}
出口类主要{
公共getOneOfArrays():A[]| B[]{
return[];//根据特定条件返回A[]或B[]
}
公共getValue(索引:编号){
const-arr:A[]| B[]=this.getOneOfArrays();
常数a=此.copy(arr[index]);
a、 数值=1234;

arr.push(a);//只有当
a
B
的类型时,才能将
a | B
推到
a[]
上,因为type
B
缺少
abc
属性

您可以在以下情况下推送它:

arr.push(a作为a);
(arr as B[])。按(a as B);
(arr作为B[])。推(a作为a);
所以你必须以某种方式检查i,a是B,arr是a[],在这种情况下,应用一些不同的逻辑


到目前为止我们得到的最接近的一个:
(arr作为a[]的类型)。推(a);
您将关闭编译错误,但是当您尝试将
B
添加到
a[]
时,情况会怎样呢?您将拥有
a
的数组,其中一个元素没有属性
abc
。因此
arr[42].abc
将是
未定义的
,TS将告诉您这是真的。但从技术上讲,它在给定时间只能是一种类型。我假设我试图实现的是不可能的?据我所知:只有在
数组的情况下才可能。push(B)
其他3种情况都可以。如果使用泛型和高级类型,例如
declare type OneOf=T扩展了A?A:B
,那么开发人员很清楚,一次只能使用一种特定类型调用函数,并且在给定的时间内,
arr
不能
(A | B)[