Általános típusok implementálása egyéni típusok és osztályok használatával

Befejeződött

Az olyan primitív típusok használatával, mint például numberstringbooleana generikusok fogalmai jól szemléltethetők, de a leghatásosabb felhasználási módok az egyéni típusok és osztályok használatával jönnek létre.

Ebben a példában egy alaposztály neve Car és két alosztálya van, ElectricCar valamint Truck. A accelerate függvény elfogadja az általános példányt Car , majd visszaadja azt. A kiterjesztendő Carfüggvény megadásával a accelerate TypeScript tudja, hogy T mely függvényeket és tulajdonságokat hívhatja meg a függvényen belül. A generikus a függvénynek átadott autótípust (ElectricCar vagy Truck) is visszaadja, nem pedig egy nem specifikus Car objektumot.

class Car {
    make: string = 'Generic Car';
    doors: number = 4;
}
class ElectricCar extends Car {
    make = 'Electric Car';
    doors = 4
}
class Truck extends Car {
    make = 'Truck';
    doors = 2
}
function accelerate<T extends Car> (car: T): T {
    console.log(`All ${car.doors} doors are closed.`);
    console.log(`The ${car.make} is now accelerating!`)
    return car
}

let myElectricCar = new ElectricCar;
accelerate<ElectricCar>(myElectricCar);
let myTruck = new Truck;
accelerate<Truck>(myTruck);

A konzol kimenete a következő:

"All 4 doors are closed."
"The Electric Car is now accelerating!"
"All 2 doors are closed."
"The Truck is now accelerating!"

Általános korlátozások használata egyéni típusokkal és osztályokkal

A modul korábbi részében megtanulta, hogyan használhat általános korlátozásokat a típusok korlátozására. Az általános korlátozások nem csak a natív típusokra, hanem az osztályokra is alkalmazhatók.

Ezt úgy teheti meg, hogy meghatároz egy felületet, majd a extend kulcsszót a típusváltozóval bővíti. Az előző példa korlátozás csatolásával korlátozta a T típust – T ki kell terjesztenie Car.