Wątek przeniesiony 2023-11-26 23:29 z JavaScript przez Riddle.

Jak stworzyć komponent generyczny bez typu T, czy to możliwe ?

0

Zakładając, że mam typ bazowy oraz dwa nowe typy dla których typem bazowym jest BaseType:

interface BaseType {
  color: string;
  speed: number;
}

interface BaseFirst extends BaseType {
    newField: string;
}

interface BaseSecond extends BaseType {
    newField: string;
}

Chcę stworzyć komponent w React, który będzie przyjmował zarówno typ BaseFirst jak i BaseSecond w przypadku jednego propsa. Jak to zrobić bez używania generyków (zazwyczaj jest to zapis z T) oraz bez takiego zapisu przy typowaniu propsa: BaseFirst | BaseSecond. Czy jest możliwy jakiś inny zapis aby to zrobić i komponent przyjmował te dwa typy w jednym propsie ? Chodzi mi o to, że props może być czasami typu BaseFirst, a czasami typu BaseSecond.

1

A czemu po prostu nie przyjąć BaseType? Jeśli chcesz się odnieść do newField, to czemu nie przenieść pole do BaseType?

0
Riddle napisał(a):

A czemu po prostu nie przyjąć BaseType? Jeśli chcesz się odnieść do newField, to czemu nie przenieść pole do BaseType?

Hmm a co jeśli te newField będzie miało inny typ w BaseFirst i inny typ w BaseSecond ?

stivens napisał(a):

https://www.tektutorialshub.com/typescript/generic-constraints-in-typescript/

Tylko tutaj może być taki problem, że jak np używam useState z takim typem to ten zapis T extends number|string nie zadziała w przypadku typu dla useStatea, bo z tego co czytałem nie jest to dozwolone w useState.

0

Najlepiej to dyscriminated unions jak wyżej napisał ktoś, a jak to nie pomoże to jebnij any wszędzie Kappa :D

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