export enum Direction { NORTH = "NORTH", SOUTH = "SOUTH", EAST = "EAST", WEST = "WEST", } export const directions: Direction[] = [ Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST, ]; export function rotateDirection( initialDirection: Direction, rotationAngle: 0 | 90 | 180 | 270, ): Direction { const angleToDirectionMap: Record = { [Direction.NORTH]: 0, [Direction.EAST]: 90, [Direction.SOUTH]: 180, [Direction.WEST]: 270, }; const finalAngle = (360 + angleToDirectionMap[initialDirection] - rotationAngle) % 360; return (Object.keys(angleToDirectionMap) as Direction[]).find( (direction) => angleToDirectionMap[direction] === finalAngle, )!; }