funkcje generyczne [Type Script]

Odpowiedz Nowy wątek
2019-04-15 10:24
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ć ? ;)

Pozostało 580 znaków

2019-04-15 10:33
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 :-)


edytowany 8x, ostatnio: Patryk27, 2019-04-15 10:39
Sama konstrukcja nie ma tutaj ścisłego powiązania ponieważ to tylko przykład Co do reszty zgodzę się z Tobą, że generyczna metoda nie powinna schodzić w dół hierarchii klas, zwyczajnie kombinowałem czy można tak - aolo23 2019-04-15 11:54

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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