• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Komponent funkcyjny z <T>, jako const [TypeScript, React]

Object Storage Arubacloud
0 głosów
266 wizyt
pytanie zadane 18 maja 2022 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)

Cześć, mam pytanie, być może trywialne - jak zapisać w komponencie funkcyjnym przypisanym do zmiennej (stałej dokładnie) przekazany parametr <T>?

Już tłumaczę przykładami. Wiem, że jest możliwe coś takiego i to działa, ale jednak chciałbym się trzymać przyjętego standardu w aplikacji i stosować zapis z przypisaniem funkcji do `const`.

export interface ITestComponentProps<T> {
  dataRow: T[]
}

Więc zamiast tego:

import _ from 'lodash'

import { ITestComponentProps } from './TestComponent.interface'

function TestComponent<T>(props: ITestComponentProps<T>): JSX.Element {
  return <>{_.map(props.dataRow)}</>
}

export default TestComponent

Chciałbym coś takiego osiągnąć:

import _ from 'lodash'

import { ITestComponentProps } from './TestComponent.interface'

const TestComponent = <T> (props: ITestComponentProps<T>): JSX.Element => {
  return <>{_.map(props.dataRow)}</>
}

export default TestComponent

Jest to w ogóle możliwe, a jak tak, to w jaki sposób musiałbym zapisać typ do funkcji?

Odpowiadając na mój zamysł, to tworzę uniwersalny komponent - wrapper. Przykładowo uniwersalną tabelę, która przyjmuje różnego typu dane do wierszy. A `<T>` jest mi niezbędny, żeby potem nie wpisywać `<any>` typów przy innych typach i interfejsach.

Przy okazji, polecacie stosować nazewnictwo T, jakby zgodnie z typescriptem, czy lepiej użyć jakiejś konkretnej nazwy mówiącej, czym właściwie ten typ jest, np. `<IRowData>`?

1 odpowiedź

+1 głos
odpowiedź 18 maja 2022 przez Comandeer Guru (601,110 p.)
wybrane 19 maja 2022 przez Oskar Szkurłat
 
Najlepsza

Hmm, ale Twój zapis powinien działać. Może masz jakąś starą wersję TypeScriptu?

Przy okazji, polecacie stosować nazewnictwo T, jakby zgodnie z typescriptem, czy lepiej użyć jakiejś konkretnej nazwy mówiącej, czym właściwie ten typ jest, np. `<IRowData>`?

Imo T jest na tyle rozpowszechnione, że każdy się domyśli, o co chodzi, czy wręcz będzie oczekiwał takiej nazwy dla generyka. 

komentarz 18 maja 2022 przez Oskar Szkurłat Bywalec (2,780 p.)

Moja wersja TS to `"typescript": "^4.5.5".`

Błąd to: 

JSX element 'T' has no corresponding closing tag.

Błąd

Projekt wygenerowany przez CRA - typescript

Przy poniższym zapisie działa, ale czemu z funkcją strzałkową nie chce, to nie rozumiem.

import _ from 'lodash'

import { ITestComponentProps } from './TestComponent.interface'

const TestComponent = function <T>(props: ITestComponentProps<T>): JSX.Element {
  return <>{_.map(props.dataRow)}</>
}

export default TestComponent

 

1
komentarz 18 maja 2022 przez Comandeer Guru (601,110 p.)
OK, wygląda na to, że się nie da → https://github.com/microsoft/TypeScript/issues/15713#issuecomment-300545248

Ogólnie: przy takim zapisie generyk jest traktowany jako znacznik otwierający w JSX.
1
komentarz 18 maja 2022 przez Comandeer Guru (601,110 p.)

Podobne pytania

0 głosów
1 odpowiedź 455 wizyt
pytanie zadane 14 stycznia 2022 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)
+1 głos
2 odpowiedzi 247 wizyt
0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 4 października 2023 w JavaScript przez reaktywny Nałogowiec (40,990 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...