Dlaczego typ klawisza jest string, a powinien być int?

Dlaczego typ klawisza jest string, a powinien być int?
Kubuś Puchatek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 235
0

mam sobie metode, w teori RowKeys powinien mieć inty

Kopiuj
const onRowKeysChange = (RowKeys: Array<number>) => {
  setRowKeys(RowKeys);

    let selectedRow;
    for (let i = 0; i < data.length; i++) {
      if (data[i].key === RowKeys[0]) {
        selectedRow = data[i];
        break;
      }
    }

    if (selectedRow) {
      setName(selectedRow.name);
    }

};

I jak to jest że jak dam console.log(typeof(RowKeys[0])) to mi tu zwraca string, tu powinien być int a jest string, a console.log(typeof(data[0].key)) daje int i tu jest git

Czemu się tak dzieje?

Żeby to rozwiązać muszę robić tak

Kopiuj
if (data[i].key === Number(RowKeys[0]))
LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
0

no to wygląda tak, jakby statyczne typowanie w TypeScript się nie zgadzało z tym, co się rzeczywiście odpala w JavaScript.

i jak to jest że jak dam console.log(typeof(RowKeys[0])) to mi tu zwraca string,

A co masz faktycznie w całej tej tablicy? Skąd te dane lecą? Bo może dostajesz je dynamicznie w jakiejś postaci, natomiast to, co sobie zadeklarowałeś, nie do końca się zgadza ze stanem faktycznym?

tu powinien być int

Ale jaki int? Czemu miałby być int, skoro nie ma takiego typu nawet?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
1

TypeScript nie robi checków w runtime, więc faktycznie tam może zostać przekazane cokolwiek.

obscurity
  • Rejestracja: dni
  • Ostatnio: dni
1

Typescript tylko pilnuje żeby kod który wywołuje onRowKeysChange przekazywał tam inty, da się to "obejść" na miliony sposobów. Błąd jest nie w tym miejscu tylko w tym gdzie to wywołujesz

Kubuś Puchatek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 235
0

No ale zaraz jak przekazuje tablice typu number to czemu mam tam string zamiast numbera, używam Table która uzpuleniam danymi z bazy które są mapowane na dany typ i tam jak kliknę sobie na dany wierz to dostaje tablice z 1 elementem kluczem, gdzie w parametrze mam określony jaki ma być czyli tablica liczb

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
2
Kubuś Puchatek napisał(a):

No ale zaraz jak przekazuje tablice typu number to czemu mam tam string zamiast numbera,

Typy TypeScript działają (przynajmniej obecnie) tylko na etapie statycznej analizy, a uruchamia się stary dobry JavaScript bez typowania (kto wie, może kiedyś będzie inaczej), więc jeśli masz gdzieś dane, które wchodzą spoza TypeScripta (albo które w jakiś wadliwy sposób rzutujesz do danego typu), to jest możliwość, że pojawi ci się tablica stringów, która będzie otypowana w TypeScript jako co innego.

Żeby to sprawdzić, możesz zrobić console.log albo użyć debuggera i zobaczyć, co ci wypluwa (chyba, że problem jest gdzie indziej jeszcze, ale nie sprawdzisz, to się nie dowiesz).

Kubuś Puchatek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 235
0

Dzięki

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
1

W zasadzie to na tym polega statyczne typowanie, że typy są sprawdzane tylko na etapie kompilacji. Co więcej tam gdzie są (dodatkowo) sprawdzane w runtime (np. w javie) to a) często wynika to za słabošci języka/platformy ...b) i i tak sie da oszukać (tylko trzeba sie nieco wiecej niz w ts namęczyć).

LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
0

zależy co masz na myśli typy. Bo np. w językach statycznie typowanych (takich prawdziwych), to reprezentacja binarna danych może już być znana mniej więcej na etapie kompilacji. Np. jeśli zdeklarujesz string, to on będzie trzymany tak w pamięci, a jak zdeklarujesz 32-bitową liczbę całkowitą, to tak będzie trzymana itp. a w JS nic nie wiadomo i silniki (V8 przynajmniej tak robi) mogą co najwyżej jakąś heurystykę robić i poczynić pewne założenia na podstawie tego, co się odpala. Bo silnik jednak lubi jak wie, jakie ma typy, wtedy może to sobie zoptymalizować pod spodem.

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
1
LukeJL napisał(a):

zależy co masz na myśli typy. Bo np. w językach statycznie typowanych (takich prawdziwych).

A które to są te prawdziwe i czy TS jest prawdziwie typowany czy nie? Po czym poznać?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
LukeJL napisał(a):

zależy co masz na myśli typy. Bo np. w językach statycznie typowanych (takich prawdziwych)

Nie wiem czy takie rozróżnienie jest jakiś specjalnie pomocne.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.