SnapResult<T>: T extends "orthogonal" ? { otherVertexIndex: number; snapped: Coordinate; type: T; } : T extends "parallel" ? { otherVertexIndex: number; parallelIndex: number; snapped: Coordinate; type: T; } : T extends "vertex" ? { snapped: Coordinate; type: T; } : T extends "edge" ? { snapped: Coordinate; type: T; } : never