Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Jakého typu je proměnná (v Typescript)

Ahoj,

mám dotaz.

Uvažujme následující funkční kód:

function ProductModel() {
    var self = this;
    self.products = ko.observableArray([]);

    self.currentFilter = ko.observable(); // property to store the filter

    //...

    self.filterProducts = ko.computed(function() {
        if(!self.currentFilter()) {
            return self.products(); 
        } else {
            return ko.utils.arrayFilter(self.products(), function(prod) {
                return prod.genre == self.currentFilter();
            });
        }
    });
}

Dále se zamysleme na přepisu do Typescriptu.

konkrétně mi jde o tento řádek:

return ko.utils.arrayFilter(self.products(), function(prod) {
return prod.genre == self.currentFilter();
});

Zvýrazněná proměnná prod - jakého je typu a jak ji natypovat?

Dá se zbaběle použít any.

Tedy něco, jako:

return ko.utils.arrayFilter(self.products(), function(prod: any) {
return prod.genre == self.currentFilter();
});

A kód bude fungovat (asi s menším dopadem na výkon?).
Ale co kdybych chtěl uvést ihned konkrétní typ. Např. "String" či přesněji ko.observableArray?
(objekt ko ani není v tomto scopu znám).

Předmět Autor Datum
Podle kontextu to bude nejspíš typu "product", což by snad měl být tvůj vlastní typ. A "any" nemá na…
Wikan 22.04.2016 17:53
Wikan
Ano. díky za odpověď. Konkrétně "product" je definován, ale takto: this.products = ko.observableA…
Flash_Gordon 22.04.2016 18:02
Flash_Gordon
Product je ale { name: "Sušenky", type: "free" } nikoliv to celé pole.
Wikan 22.04.2016 18:11
Wikan
To ano. nový
Flash_Gordon 22.04.2016 19:57
Flash_Gordon
No tak v čem je problém? nový
Wikan 22.04.2016 19:59
Wikan
Jak zapsat anonymní objekt - pole vstupujícího do funkce: function(OBJEKT: NEVÍM{ name: "NEVÍM", ty… nový
Flash_Gordon 22.04.2016 20:17
Flash_Gordon
Třeba tak: interface IProduct { name: string; type: string; } this.products = ko.observableArray<IP… nový
Wikan 22.04.2016 20:25
Wikan
To už je upravené kapku víc, ale i tak testnu a pokusím se z toho vyjít. Díky. Značím vyřešeno. poslední
Flash_Gordon 22.04.2016 22:02
Flash_Gordon

Ano. díky za odpověď.

Konkrétně "product" je definován, ale takto:

 this.products = ko.observableArray([
        { name: "Sušenky", type: "free" },
        { name: "Alkohol", type: "adult" },
        { name: "Mléko", type: "free" }
]);

Čili žádný "jednoduchý" objekt typu produkt se nekoná.
Jen anonymní pole.

Ano, mohl bych se spokojit s funkční any, ale chci vědět víc.

Zpět do poradny Odpovědět na původní otázku Nahoru