export type RecursivePartial = { [P in keyof T]?: T[P] extends Array ? Array> : T[P] extends object | undefined ? RecursivePartial : T[P]; }; export interface BasicFigureDrawArgs { document: Document; x: number; y: number; size: number; } export interface DrawArgs extends BasicFigureDrawArgs { rotation?: number; getNeighbor?: (x: number, y: number) => boolean; /** A pseudo-random number generator for the given position */ getPRandom?: () => number; } export interface RotateFigureArgs> extends BasicFigureDrawArgs { rotation?: number; draw: (args: BasicFigureDrawArgs) => T; }