```ts
export function polygonDoubleArea(vertices: number[][]): number {
  if (vertices.length < 3) {
    throw new Error("At least three vertices are required.");
  }

  for (const vertex of vertices) {
    if (vertex.length !== 2 || !Number.isInteger(vertex[0]) || !Number.isInteger(vertex[1])) {
      throw new Error("Each vertex must be a pair of two integers.");
    }
  }

  if (vertices.some((v, i, arr) => i > 0 && v[0] === arr[i - 1][0] && v[1] === arr[i - 1][1])) {
    throw new Error("No two consecutive vertices can be identical.");
  }

  if (vertices[vertices.length - 1].join(',') !== vertices[0].join(',')) {
    throw new Error("The last vertex must be the same as the first vertex.");
  }

  let area = 0;
  for (let i = 0; i < vertices.length; i++) {
    const j = (i + 1) % vertices.length;
    area += vertices[i][0] * vertices[j][1];
    area -= vertices[j][0] * vertices[i][1];
  }

  return Math.abs(area);
}
```