```ts
export function finalDoorState(events: string[]): string {
  const moves: Record<string, string> = {
    unlock: "closed",
    lock: "locked",
    open: "open",
    close: "closed",
  };
  let state = "locked";
  let ignored = 0;
  for (const event of events) {
    if (moves.hasOwnProperty(event)) {
      if (state === moves[event]) {
        ignored++;
      } else {
        state = moves[event];
      }
    } else {
      throw new Error("Invalid event: " + event);
    }
  }
  return state + ":" + ignored;
}
```