Mám triedu tá má generický parameter.
V typovej definícii toho generického parametru vyhľadám všetky propsy typu Function:
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:
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:
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:
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?