reklama

Typescript - automaticke generovanie typovych definicii z iných typov

Mám triedu tá má generický parameter.

V typovej definícii toho generického parametru vyhľadám všetky propsy typu Function:

Kód: [Vybrat]
TClickableMapProps = {
    color: TColor;
    background: TColor;
    onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
    onHover?: (event: React.MouseEvent<HTMLDivElement>) => void;
}

type CallbackNames<T> = { [K in keyof T]: T[K] extends (Function | undefined) ? K : never }[keyof T];
type CallbackProps<T> = Pick<T, CallbackNames<T>>;

type TCallbackProps = CallbackProps<TClickableMapProps>

Mi vráti toto:

Kód: [Vybrat]
TCallbackProps = {
    onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
    onHover?: (event: React.MouseEvent<HTMLDivElement>) => void;
}

akurát ja by som si chcel z toho onClick a onHover odstrániť "?" undefined a názvy premenovať na triggerClick a triggerHover tj urobiť z toho toto:

Kód: [Vybrat]
TCallbackProps = {
    triggerClick: (event: React.MouseEvent<HTMLDivElement>) => void;
    triggerHover: (event: React.MouseEvent<HTMLDivElement>) => void;
}

metódy si pridám dynamicky cez JS (tam viem ako), ale tie typové definície potrebujem generovať v compile time aby mi fungovalo autocomplete. Pri použití JS by som to urobil takto:

Kód: [Vybrat]
module CallbackPropName {
  export const toTriggerMethodName = (callbackPropName: string) =>
    `trigger${(callbackPropName.substring(callbackPropName.startsWith("on") ? 2 : 0))}`;
}

lenže ako podobný názov generovať v rámci statického typovania (v compile time) priamo v TS? A dá sa to vôbec?

reklama



Re:Typescript - automaticke generovanie typovych definicii z iných typov
« Odpověď #2 kdy: 07. 08. 2019, 12:01:35 »
Hledas pravdepodobne tohle: https://www.typescriptlang.org/docs/handbook/declaration-merging.html sekce "Module Augmentation". Tim dosahnes nadefinovani toho jak bude trida vypadat az do ni dynamicky pridas properties nebo metody.


 

reklama