```ts
/** The factorial of n. */
export function factorial(n: number) {
  console.assert(Math.floor(n) === n && Number.isInteger(n), `Input must be a non-negative integer.`);
  if (n === 0) return 1;
  if (!Number.isFinite(n)) throw Error(`Factorial is not defined for non-finite numbers.`);
  if (n < 0) throw Error(`Factorial is not defined for negative numbers.`);
  let result = 1;
  for (let i = 2; i <= n; i++) {
    result *= i;
  }
  return result;
}
```