funkcje generyczne [Type Script]

0
class Fruit {

    constructor( public name :  string, public weight : number){}

    public  saySomething(){

        console.log("I'm healthy fruit")
    }
}
class Apple extends Fruit{
    
    constructor(name :  string , weight : number, public price : number){
        super(name,weight)
    }

    public saySomething() {
        console.log("I'm cheep fruit and i cost : "+this.price)
    }

    public onlyAppleFun(){
        console.log("Only for apple type")
    }
}
class Banana extends Fruit{

    constructor(name :  string , weight : number, public quality : string){
        super(name,weight)
    }
    public saySomething() {
        console.log("I'm of goood quality  : "+this.quality)
    }

    public onlyBananaFun(){
        console.log("Only for banana type")
    }
}


function whatsUp<T extends Fruit>( fruit : T) : T {

    fruit.saySomething();
    if(fruit['price']){ // this also should be checked in  different way, how?
        console.log("i'm here and i'm apple");
        // i want to do (fruit as Apple).onlyAppleFun
    }

    fruit.name = name+"_edit";

    return fruit;
}


var fruit = new Fruit("fruit",1);
var apple = new Apple("apple",2,2.35);
var banana = new Banana("Banana",3,"A");

var foo = whatsUp(fruit);
var foo1 =  whatsUp(apple);
var foo2 =  whatsUp(banana);


Prosty przykład klasa główna i dwie klasy po niej dziedziczącej.
w funkcji przyjmującej na wejście genneryka chciałbym się dobrać do funkcji dostępnej tylko dla danej klasy
Jak to uczynić ? ;)

2

w funkcji przyjmującej na wejście genneryka chciałbym się dobrać do funkcji dostępnej tylko dla danej klasy

W sensie, że co konkretnie chciałbyś zrobić i dlaczego?

Jeśli tworzysz funkcję, która przyjmuje dowolny owoc, to nie możesz się wewnątrz niej odwołać do metod, których nie będzie w dowolnym owocu (w abstrakcji) - na tym polega cała idea generyków.

Tak więc jeśli pole cena istnieje tylko w jabłku, powinieneś stworzyć metodę, która przyjmuje tylko jabłko - a najlepiej będzie w ogóle przeorać cały ten design, ponieważ dziedziczenie nie jest tutaj żadnym rozwiązaniem: jabłko nie jest odrębnym bytem, tylko rodzajem owocu, więc powinieneś mieć jedną zwyczajną klasę Fruit, bez żadnych abstrakcji :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1