diff --git a/core/strategies/helpers/index.ts b/core/strategies/helpers/index.ts index 4b39359..1c8bdc5 100644 --- a/core/strategies/helpers/index.ts +++ b/core/strategies/helpers/index.ts @@ -43,7 +43,7 @@ export enum StrategyComponentType { HEADING = "heading", VALUE = "value", - STATUS = "status", + STATUS = "status" } export type StrategyComponentParameterMap = { @@ -62,12 +62,14 @@ export type StrategyComponentParameterMap = { [StrategyComponentType.HEADING]: {}; [StrategyComponentType.VALUE]: {}; [StrategyComponentType.STATUS]: { - liquidation?: any, - status?: any, + liquidation?: any; + status?: any; }; }; -export interface IStrategyComponent { +export interface IStrategyComponent< + ComponentType extends StrategyComponentType +> { type: ComponentType; name: string; @@ -75,19 +77,22 @@ export interface IStrategyComponent placeholder?: ( context: IStrategyContext & { - component: IStrategyComponent & StrategyComponentParameterMap[ComponentType]; + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } ) => string; validate?: ( context: IStrategyContext & { - component: IStrategyComponent & StrategyComponentParameterMap[ComponentType]; + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } ) => string | void; defaults?: (context: Omit) => object; update?: ( context: IStrategyContext & { - component: IStrategyComponent & StrategyComponentParameterMap[ComponentType]; + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } ) => void; @@ -122,10 +127,14 @@ export interface IStrategy { submitText?: string; } -export function defineStrategyComponent( - component: IStrategyComponent +export function defineStrategyComponent< + ComponentType extends StrategyComponentType +>( + component: IStrategyComponent & + StrategyComponentParameterMap[ComponentType] ) { - return component as IStrategyComponent; + return component as IStrategyComponent & + StrategyComponentParameterMap[ComponentType]; } export function defineStrategy(strategy: IStrategy) {