typescript - Hvordan sette sammen to forskjellige array-typer som utvider/arver samme type?
Jeg har to klasser som arver fra samme superklasse:
class Vehicle {}
class Bus extends Vehicle {}
class Truck extends Vehicle {}
La oss ha to typede matriser:
var buses : Bus[];
var trucks : Truck[];
og en funksjon som aksepterer et array av superklasse-typen.
function checkOil(vehicles : Vehicle[]) {}
Jeg kan sende inn et array av busser eller et array av lastebiler, men jeg kan ikke slå dem sammen og sende dem sammen:
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:
Hvordan slår jeg sammen de arrayene?
REDIGER: TypeScript-lekeplass
Svar #1
Kastingen til <Vehicle[]> bør fungere
function checkOil(vehicles : Vehicle[]) {}
checkOil((<Vehicle[]>buses).concat(trucks));
Typescript vil kaste (bussene) til Vehicle[], og det samme vil gjøres med resten
f.eks. dette vil returnere (i konsollen) to objekter - Kjøretøy
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)
Svar #2
Bare skriv assert på det første arrayet til en felles type av de to arraytypene:
checkOil((<Vehicle[]>buses).concat(trucks));
