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

dan*_*cek 6 typescript

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

class Vehicle {}

class Bus extends Vehicle {}

class Truck extends Vehicle {}
Run Code Online (Sandbox Code Playgroud)

我们有两个类型化的数组:

var buses : Bus[];
var trucks : Truck[];
Run Code Online (Sandbox Code Playgroud)

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

function checkOil(vehicles : Vehicle[]) {}
Run Code Online (Sandbox Code Playgroud)

我可以通过一系列公共汽车或卡车阵列,但我不能将它们合并并将它们传递到一起:

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:
Run Code Online (Sandbox Code Playgroud)

如何合并这些数组?

编辑:TypeScript Playground

Rad*_*ler 9

铸造<Vehicle[]>应该工作

function checkOil(vehicles : Vehicle[]) {}

checkOil((<Vehicle[]>buses).concat(trucks));
Run Code Online (Sandbox Code Playgroud)

打字稿将被转换(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)
Run Code Online (Sandbox Code Playgroud)