我有两个继承自同一个超类的类:
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:
如何合并这些数组?
答案 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));