```typescript
/** The factorial of n. */
export function factorial(n: number): number {
  if (Number.isInteger(n) && n >= 0) {
    if (n === 0 || n === 1) {
      return 1;
    }
    return n * factorial(n - 1);
  }
  throw new Error('Argument must be a non-negative integer');
}
```