Returtype samme som inputtype i TypeScript


Jeg har to funksjoner som gjør det samme, med den eneste forskjellen at inndata-typene og returtypene er forskjellige. Jeg lurte på hvordan jeg kunne «slå sammen» disse funksjonene til én, og en av ideene var å bruke en unionstype, men min begrensning er at når inndataene er ett medlem av unionen, må den returnerte verdien være den samme.

const getViewStyle = (styles: ViewStyle[]): ViewStyle => {
  return Object.assign({}, ...styles);
};

const getTextStyle = (styles: TextStyle[]): TextStyle => {
  return Object.assign({}, ...styles);
};

Svar #1

Du kan gjøre dette:

const flattenObjectsToSingle = <T>(items: T[]): T => { ...

Svar #2

En blanding av generiske typer og utledede typer ville være det beste. Det aksepterte svaret vil la Typescripts linter fortsette å klage hvis du forventer at en av typene skal returneres når du bruker funksjonen.

Så, etter min mening, ville dette være det beste svaret:

const getStyle = <T extends TextStyle | ViewStyle >(styles: T[]): T => { 
      return Object.assign({}, ...styles);
};

Det dette grunnleggende sier er at funksjonen forventer et array av TextStyle eller ViewStyle og returnerer én post av hvilken som helst type som blir gitt.

Kredit går til Ben Awad-videoen på YouTube: https://www.youtube.com/watch?v=nViEqpgwxHE

Relaterte artikler