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));

Relaterte artikler