如何连接两个扩展/继承相同类型的两种不同类型的类型化数组?

时间:2014-07-25 15:42:40

标签: typescript

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

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

2 个答案:

答案 0 :(得分:8)

<Vehicle[]>的投射应该有效

function checkOil(vehicles : Vehicle[]) {}

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

Typescript会将(busses)强制转换为Vehicle[],其余部分也会这样做

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

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)

答案 1 :(得分:3)

只需将第一个数组断言为两种数组类型的通用类型:

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