如何连接扩展/继承同一类型的两个不同数组类型



我有两个继承自同一个超类的类:

class Vehicle {}
class Bus extends Vehicle {}
class Truck extends Vehicle {}
让我们有两个类型数组:
var buses : Bus[];
var trucks : Truck[];

和一个接受超类类型数组的函数。

function checkOil(vehicles : Vehicle[]) {}

我可以传入一组公交车或一组卡车,但我不能将它们合并并一起传递:

function checkOil(buses.concat(trucks));

//error TS2082: Supplied parameters do not match any signature of call target:
    Types of property 'pop' of types 'Bus[]' and 'Track[]' are incompatible:

如何合并这些数组?

编辑:TypeScript Playground

转换到<Vehicle[]>应该工作

function checkOil(vehicles : Vehicle[]) {}
checkOil((<Vehicle[]>buses).concat(trucks));

Typescript会将(busses)转换为Vehicle[],其余的

也会这样做

。这将返回(在控制台)两个对象-车辆

class Vehicle
{
    public Type: string;
}
class Bus extends Vehicle
{
    public A: string;
}
class Truck extends Vehicle
{
    public B: number
}
var buses: Bus[] = [];
buses.push({Type: 'Bus', A : 'A1'});
var trucks: Truck[] = [];
trucks.push({ Type: 'Truck', B: 1 });
function checkOil(vehicles: Vehicle[]) : Vehicle[]
{
    return vehicles;
}
var result = checkOil((<Vehicle[]>buses).concat(trucks));
console.log(result)

只需将第一个数组类型断言为两种数组类型中的公共类型:

checkOil((<Vehicle[]>buses).concat(trucks));

相关内容

最新更新