```ts
/**
 * Returns every cell standing exactly radius steps from the centre, laid out as one closed walk.
 * @param center - The centre address [q, r] of type number[].
 * @param radius - The radius of type number.
 * @returns An array of axial addresses [q, r].
 */
export function hexRingWalk(center: number[], radius: number): number[][] {
  if (!Array.isArray(center) || center.length !== 2 || !center.every(Number.isInteger)) {
    throw new Error('Center must be a two-element array of whole numbers.');
  }
  if (typeof radius !== 'number' || !Number.isInteger(radius) || radius < 0) {
    throw new Error('Radius must be a non-negative whole number.');
  }

  const steps = [
    [1, 0],   // east
    [1, -1],  // northeast
    [0, -1],  // northwest
    [-1, 0],  // west
    [-1, 1],  // southwest
    [0, 1]    // southeast
  ];

  const walk: number[][] = [];
  let current = center.map(Number);

  for (let i = 0; i < radius * steps.length; i++) {
    if (i % steps.length === 0) {
      current[0] += steps[i][0] * radius;
      current[1] += steps[i][1] * radius;
    }
    walk.push([...current]);
    current[0] += steps[i % steps.length][0];
    current[1] += steps[i % steps.length][1];
  }

  return walk;
}
```